C# 具有AddRange和Contains并选择的Linq ForEach
我有一个foreach循环,我正试图将其转换为linq查询C# 具有AddRange和Contains并选择的Linq ForEach,c#,linq,lambda,foreach,C#,Linq,Lambda,Foreach,我有一个foreach循环,我正试图将其转换为linq查询 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.Order
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);
}
}
但这显然不起作用,请引导我走向正确的方向
var ListID = SubDetails
.Where(info => typeList.Any(type => type == info.TypeID)
.Select(info => info.OrderID);
您可以将ListID填写为
SubDetails.Where(t => typeList.Exists(lst => lst.XXX == t.TypeID)).Select(id => id.OrderID)
试试这个
var ListID = typelist.Join(SubDetails,tl=>tl,sd=>sd.TypeID,(tl,sd)=>sd.OrderID).ToArray();
您好,谢谢您的回复,但是我从typeList中得到了错误。Contains(t.TypeID))作为typeList。Contains期望在其中包含一些自定义类型的内容,我可以将其与Ed的答案typeList进行合并。任何(u=>u.TypeID==t.TypeID),请告知您的方法。我错过了自定义类型部分
var ListID = typelist.Join(SubDetails,tl=>tl,sd=>sd.TypeID,(tl,sd)=>sd.OrderID).ToArray();