2012-03-23 10 views
2

プロジェクトの一覧からIEnumerable<Item>を収集しようとしています。LINQを使用して列挙型から要素を集める

ここで私が働いているコードです:

IEnumerable<Project> projects; 

List<Item> itemList = db.Items.ToList(); 
IEnumerable<Items> item = itemList.Where(i => i.ProjectID == /*the ID of each project from projects*/) 

が、私もこのルートを行く試みた:IEnumerable<Items> item = from i in itemList where i.ProjectID == /*the ID of each project from projects*/ select i;

私は、関連するすべてのアイテムを収集するために、各プロジェクトを反復処理するにはどうすればよいですか?

答えて

5
IEnumerable<Items> item = from i in itemList 
          where projects.Any(p => p.ID == i.ProjectId) 
          select i; 

またはそれを行うには非常に多くの方法があります

IEnumerable<Items> item = itemList.Where(i => projects.Any(p => p.ID == i.ProjectID)); 
+0

パーフェクト。ありがとう。 –

0

あなたのメソッドの構文を使用して。これらのように:

IEnumerable<Items> items = projects.SelectMany(p => itemsList.Where(i => i.ProjectID == p.ID)) 

または

IEnumerable<Items> items = itemsList.Where(i => projects.Any(p => p.ID == i.ProjectID)) 
+0

異なる視点に感謝します。私はこれを念頭に置いておきます。 –

0

代わりのAny()、あなたもjoinを使用することができます。

var item = from i in itemList 
    join p in projects on i.ProjectId equals p.ProjectId 
    select i; 
関連する問題