我無法使用動態生成的謂詞查詢MongoDB數據庫。MongoDB with C# - 使用動態生成的謂詞查詢
文件藥結構我試圖查詢的是:
{
"_id" : 3121 ,
"Active" : true ,
"CategoryId" : 1 ,
"Crci" : "IH" ,
"CultureId" : null ,
"DateUpdated" : {
"$date" : 1381916923120
} ,
"Description" : "National Careers Service: Actuary" ,
"Keywords" : "" ,
"MaxLevel" : null ,
"MinLevel" : null ,
"PhoneNumber" : " " ,
"Priority" : 1 ,
"Title" : "National Careers Service: Actuary" ,
"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
}
,我試圖用在產生一個運行時如謂詞查詢:
Expression<Func<ExternalResourceView, bool>> predicate = predicateBuilder.True<ExternalResourceView>();
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));
}
else if (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));
}
IEnumerable<ExternalResourceView> matchingExternalResources = _externalResourceLibrary.AsQueryable().Where(predicate)
當我嘗試和執行該查詢我收到錯誤:「Unsupported where clause: <InvocationExpression>
」。
我無法找到Linq to Mongo是否能夠從這樣的表達式生成查詢(我認爲它應該)。
所以我只是想做一些C#Mongo驅動程序不支持的東西,或者我沒有產生謂詞嗎?我從another question看到,我試圖做的事情應該是可能的(至少在理論上)。
我使用的是官方10gen的驅動程序版本1.8.3
你可以嘗試.Tolist()不論.AsQueryable() –
@RaphaëlAlthaus的我完全忘了AsExpandable()!它確實解決了這個問題。如果您將此作爲答案添加,我會接受它 – Anduril