将一个列表的部分合并到另一个列表中的LINQ
将一个列表的部分合并到另一个列表中的LINQ
我正在尝试找出如何从一个列表中选择不同的值,然后将这些不同的值转置到另一个列表中。\n我有以下代码:\n模型:\n
public class Participant { public int UserId { get; set; } public string Name { get; set; } }
\n控制器代码:\n
Listparticipants = new List (); participants = project .QuickView .Select(x => new Participant { x.UserId, x.FullName}) .Distinct() .ToList();
\n这似乎可以获取到不同的UserId和FullName值,但不是我需要的List格式。我得到的是IEnumerable格式而不是List格式。我错过了什么,以便让LINQ将结果放入一个新的Participant列表中?
问题的原因是希望将一个列表的部分内容合并到另一个列表中,但是使用了不合适的方法。解决方法是使用自定义的IEqualityComparer与Distinct方法结合使用。
在解决方法中,首先定义了一个自定义的IEqualityComparer类,该类实现了Equals和GetHashCode方法。Equals方法用于比较两个Participant对象的UserId和Name属性是否相等,GetHashCode方法用于获取Participant对象的散列码。
然后,在调用中使用了Distinct方法,并传入了自定义的EqualityComparer对象作为参数。Distinct方法用于去除重复的元素,而自定义的EqualityComparer对象用于比较Participant对象是否相等。
最终,将去重后的结果转换为列表并赋值给participants变量。
代码如下:
public class CustomEqualityComparer : IEqualityComparer{ public bool Equals(Participant x, Participant y) { return x.UserId == y.UserId && x.Name == y.Name; } public int GetHashCode(Participant obj) { return new Tuple (obj.UserId, obj.Name).GetHashCode(); } } participants = project.QuickView.Distinct(new CustomEqualityComparer()).ToList();