当前位置: 首页 > 编程语言 > C#

带有C#的MongoDB – 使用动态生成的谓词进行查询分享

时间:2023-04-10 14:27:51 C#

C#学习教程:使用C#的MongoDB-使用动态生成的谓词查询我要查询的文档结构是:{"_id":3121,"Active":true,"CategoryId":1,"Crci":"IH","CultureId":null,"DateUpdated":{"$date":1381916923120},"Description":"NationalCareersService:Actuary","Keywords":"","MaxLevel":null,"MinLevel":null,"PhoneNumber":"","Priority":1,“标题”:“国家职业服务:精算师”,“WebUrl”:“https://nationalcareersservice.direct.gov.uk/advice/planning/jobprofiles/Pages/actuary.aspx”,“CareerCultureExternalResources”:[{“CareerId”:5,“CultureId”:1,“DisplayOrder”:1,“ExternalResourceId”:3121,“Vgs”:null}],“SubjectExternalResources”:[],“LifestyleCategories”:null}我正在尝试使用生成要查询的谓词:Expressionpredicate=predicateBuilder.True();if(request.CultureId!=null&&request.CareerId!=null){predicate=predicate.And(er=>er.CareerCultureExternalResources.Any(ccer=>ccer.CareerId==request.CareerId.Value&&ccer.CultureId==request.CultureId.Value));}elseif(request.SubjectAreaId!=null&&request.SubjectLevel!=null&&request.CultureId!=null){predicate=predicate.And(er=>er.SubjectExternalResources.Any(ser=>ser.SubjectAreaId==request.CareerId&&ser.CultureId==request.CultureId));}IEnumerablematchingExternalResources=_externalResourceLibrary.AsQueryable().Where(predicate)当我尝试执行查询时,我收到错误:“不支持的where子句:”我无法确定LinqtoMongo是否能够从表达式生成查询,例如这个(我认为应该)。所以我只是想做一些C#Mongo驱动程序不支持的事情,或者我没有正确生成谓词?我从另一个问题中看到我正在尝试做的事情应该是可能的(至少在理论上)。我正在使用官方10gen驱动程序版本1.8.3不确定它是否是mongodb的解决方案,但您可以尝试使用linqkit中的AsExpandable()(与PredicateBuilder由同一个人制作)。LinqKit(以及有关AsExpandable()和与PredicateBuilder的关系的更多信息可在此处找到!=null&&request.CareerId!=null){queries.Add(Query.ElemMatch(p=>p.Dependents,q=>Query.And(q.EQ(x=>x.CareerId,request.CareerId),q.EQ(x=>x.CultureId,request.CultureId))));}//...等等//最终查询:varquery=Query.And(queries);我将查询更改为使用$elemMatch因为我想你想在同一个数组元素上匹配careerId和cultureId。如果那个假设是错误的,相应地调整查询。以上是C#学习教程:MongoDBwithC#-使用动态生成的谓词查询和共享所有内容。如果对大家有用,需要多了解C#学习教程,希望大家多多关注,本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: