2012-01-11 56 views
2

我有一个foreach循环,我试图变成一个LINQ查询的LINQ的ForEach用的AddRange和包含选择

List<CustomType> typeList=new List<CustomType>(); 
List<int> ListID=new List<int>(); 

foreach (Info info in SubDetails) 
{ 
    if (typeList.Contains(info.TypeID)) 
    { 
     ListID.Add(info.OrderID); 
    } 
} 

现在我试图把它变成一个LINQ循环

SubDetails.ForEach(u => List.AddRange(
        typeList.Contains(ID or something) 
        .Select(u.OrderID))); 

但是这并没有明显的工作,请指导我朝着正确的方向

回答

1

试试这个:

var ListID = SubDetails 
       .Where(info => typeList.Any(type => type == info.TypeID) 
       .Select(info => info.OrderID); 
1

您可以填写ListID作为

SubDetails.Where(t => typeList.Exists(lst => lst.XXX == t.TypeID)).Select(id => id.OrderID) 
+0

嗨,感谢您的答复,但我从typeList.Contains(t.TypeID))作为typeList.Contains得到的错误预期自定义类型的东西在里面,我可以让我的工作与合并的答案Ed,typeList.Any(u => u.TypeID == t.TypeID),请好好开导你的方法 – MegaMind 2012-01-11 07:02:35

+0

哎呀,我错过了customtype部分 – V4Vendetta 2012-01-11 07:13:08

+0

1 upvote for you – MegaMind 2012-01-11 07:19:48

1

尝试。

var ListID = typelist.Join(SubDetails,tl=>tl,sd=>sd.TypeID,(tl,sd)=>sd.OrderID).ToArray();