我有2个myType列表,让myType具有属性 x y和z;
class myType
{
public int x {get;set;}
public int y {get;set;}
public int? z {get;set;}
}
List<myType> list1 = new List<myType>();
List<myType> list2 = new List<myType>();
我想要做的是获取2个列表之间匹配项目的列表
其中list1[i].x == list2[i].x && list1[i].y == list2[i].y
无论z
这是我的代码
List<MiHHUserComponent> components ;
List<MiHHUserComponent> dbComponents;
我需要在2个列表之间匹配的项目
components[i].HHComponentFormName == dbComponents[i].HHComponentFormName
&& components[i].HHComponentName== dbComponents[i].HHComponentName
我尝试了以下代码
for (int j = 0; j < hhUsersIDs.Count; j++)
{
var hhUser = hhUsersIDs[j];
var results = (from l1 in dbComponents
join l2 in components
on new { l1.HHUserID, l1.HHComponentFormName,l1.HHComponentName }
equals new {hhUser.HHUserID ,l2.HHComponentFormName,l2.HHComponentName }
select new
{
// select whatever you want here, eg:
HHUserID = hhUser.HHUserID,
HHComponentFormName = l1.HHComponentFormName,
HHComponentName = l1.HHComponentName
}).ToList();
}
我有2个不同要素数量的清单
他们有匹配的项目
我需要新的列表包含它们之间的匹配项目,基于两个列表中的特定项目
因为价值,新列表中会有重复的元素
z将取自另一个列表中的不同值
我希望现在明白了
答案 0 :(得分:2)
您可以使用简单的linq
扩展方法实现此目的。
var rresult = list1.Where(x=> list2.Any(l=>l.x ==x.x && l.y ==x.y));
答案 1 :(得分:1)
使用linq加入:
请务必添加:using System.Linq;
var results = (from l1 in list1
join l2 in list2
on new { l1.x, l1.y } equals new { l2.x, l2.y }
select new myType()
{
// select whatever you want here, eg:
X = l1.x,
Y = l1.y,
Z = default(int) // or whatever the type of z is
}).ToList();
编辑:
var results = (from l1 in dbComponents
join l2 in components
on new { l1.HHComponentFormName, l1.HHComponentName }
equals new { l2.HHComponentFormName, l2.HHComponentName }
where l1.HHUserID == hhUser.HHUserID
select new myType()
{
// select whatever you want here, eg:
HHUserID = hhUser.HHUserID,
HHComponentFormName = l1.HHComponentFormName,
HHComponentName = l1.HHComponentName
}).ToList();
答案 2 :(得分:0)
var lookup1 = list1.ToLookup(t => new { t.x, t.y });
var lookup2 = list2.ToLookup(t => new { t.x, t.y });
var keys = lookup1.Where(t => lookup2.Contains(t.Key)).Select(t => t.Key);
return keys.SelectMany(t => lookup1[t].Concat(lookup2[t]));