2014-01-28 1 views
2

У меня есть коллекция, которую я пытаюсь выполнить с помощью драйвера C#. структура документа:Запрос MongoDb из C# - используя Linq .Any() с предикатом

{ 
    "_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 
} 

запрос я пытаюсь запустить это:

collection.AsQueryble().Where(
       er => 
       er.CareerCultureExternalResources.Any(
        ccer => ccer.CareerId == request.CareerId && ccer.CultureId == request.CultureId)); 

передавая значения careerId = 637 и cultureId = 1, я получаю ошибку: "Unsupported where clause: ((Int32)ccer.CareerId == 637)"

Однако на учебники MongoDB на странице он говорит, что этот вид запроса покрыт: http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/

Я ухожу п. версия 1.8.3 драйвера

+2

Соответствуют ли типы данных? Является ли 'CareerId'' '' запросом' Int32? – WiredPrairie

+0

Используйте класс Query для создания ваших запросов следующим образом: Query.EQ («CareerId», request.CareerId). –

+0

@WiredPrairie Это одна из интереснейших вещей - «CareerId» является короткой, а также типом данных для «CareerCultureExternalResource». Таким образом, типы данных совпадают, но ошибка не имеет смысла. Я не уверен, почему он пытается передать его в 'int' – Anduril

ответ

1

В настоящее время, используя where и условное предложение, как вы это делали, при использовании Linq ограничено подмножеством типов данных .NET. Вместо использования short используйте вместо этого Int32/(int).