Как найти коллекцию в моем предложении LINQ Where? - PullRequest
1 голос
/ 15 апреля 2009

У меня есть следующая модель данных сущности ADO.NET Entity Framework:

ADO.NET Entity Data Model

Я хочу найти всех держателей полисов как с услугой с указанным идентификатором, так и с ключевым словом данного статуса.

Этот LINQ не работает:

Dim ServicesId As Integer = ...
Dim KeywordStatus As Integer = ...

Dim FoundPolicyholders = From p As Policyholder In db.PolicyholderSet.Include("Keywords").Include("Services") _
                         Where p.Services.Id = ServicesId _
                         And p.Keywords.Status = KeywordStatus _
                         Select p

Предложение Where не может таким образом искать p.Services и p.Keywords EntityCollections.

'Id' не является членом «System.Data.Objects.DataClasses.EntityCollection (Из .... Сервис).

Каков правильный синтаксис LINQ, чтобы делать то, что я хочу?

1 Ответ

7 голосов
/ 15 апреля 2009
db.PolicyholderSet.Where(ph =>
   ph.Services.Any(s => s.Id == someId) &&
   ph.Keywords.Any(kw => kw.Status == someStatus))

Почему ваш запрос не работает? Поскольку p.Services и p.Keywords являются коллекциями Service и Keyword - они не имеют свойства Id или Status, поэтому вы не можете использовать p.Services.Id или p.Keywords.Status.

Visual Basic & hellip;

Dim FoundPolicyholders = From p As Policyholder In db.PolicyholderSet.Include("Keywords").Include("Services") _
                         Where p.Services.Any(Function(s) s.Id = ServicesId) _
                         And p.Keywords.Any(Function(k) k.Status = KeywordStatus) _
                         Select p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...