2009-04-15 10 views
1

私は、次のADO.NET Entity Frameworkのエンティティデータモデルを持っている:LINQ Where句でコレクションのコレクションを検索するにはどうすればよいですか?

ADO.NET Entity Data Model

私が付与されたIDのサービスとも与えられた状況のキーワードの両方を持つすべての保険契約者を見つけたいです。

このLINQは動作しません。句はそのようにp.Servicesとp.KeywordsのEntityCollectionsを検索することはできません

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 

ザ・。

'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.Keywordsは、とKeywordのコレクションなので、IdまたはStatusというプロパティがないため、p.Services.Idまたはp.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

機能「Any」が必要な手がかりでした。ありがとうございました。 –

関連する問題