2009-04-15 144 views
1

我有以下ADO.NET實體框架實體數據模型:如何在LINQ Where子句中搜索集合的集合?

ADO.NET Entity Data Model

我想找到所有的投保人既具有給定id的服務,也給定狀態的關鍵詞。

這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語法來做我想要的?

回答

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

爲什麼你的查詢不起作用?因爲p.Servicesp.KeywordsServiceKeyword集合 - 它們沒有屬性IdStatus因此您不能使用p.Services.Idp.Keywords.Status

Visual Basic…

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 
+0

函數「任何」是我需要的線索。謝謝。 – 2009-04-15 15:35:11