[英]Viewmodel has a list of items and each item has another list of items
[英]Checking if a list's item has a property contained in another list of items
我有两个列表,它们的项目类型不同。 它们的两个类型(Item1和Item2)都有一个名为“名称”的属性。 我想遍历list1中的所有项目。 如果list1中的任何项目具有与list2中的项目名称相同的名称,那么我想将其添加到listWhereNamesMatch。
List<Item1> list1;
List<Item2> list2;
List<Item1> listWhereNamesMatch;
foreach (var item1 in list1)
{
foreach (var item2 in list2)
{
if(item1.Name == item2.Name)
{
listWhereNamesMatch.add(item1);
break;
}
}
}
我有一个查询,但是我想知道是否有一种更清洁或更有效的方法来执行此操作。 这是我所拥有的:
var results = list1.FindAll(o => list2.FirstOrDefault(b => b.Name == o.Name) != null);
listWhereNamesMatch.AddRange(results);
您可以尝试以下方法:
var results = list1.Join(list2, x=> x.Name, y => y.Name, (x,y) => x);
listWhereNamesMatch.AddRange(results);
或其他形式:
var results = from a in list1
join b in list2
on a.Name equals b.Name
select a;
listWhereNamesMatch.AddRange(results);
var list1 = new List<MyItem>();
var list2 = new List<MyItem>();
var listWhereNamesMatch = list1.Intersect(list2);
// implement IEquatable within your class
class MyItem : IEquatable<MyItem>
{
public string Name { get; set; }
bool IEquatable<MyItem>.Equals(MyItem other)
{
return this.Name == other.Name;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.