如何在LINQ Where子句中搜索集合的集合?

时间:2009-04-15 15:16:39

标签: .net vb.net linq entity-framework lambda

我有以下ADO.NET实体框架实体数据模型:

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 个答案:

答案 0 :(得分:7)

db.PolicyholderSet.Where(ph =>
   ph.Services.Any(s => s.Id == someId) &&
   ph.Keywords.Any(kw => kw.Status == someStatus))

为什么您的查询不起作用?由于p.Servicesp.KeywordsServiceKeyword集合,因此它们不具有属性IdStatus,因此您无法使用{{1} }或p.Services.Id

Visual Basic ...

p.Keywords.Status