将一个列表的部分合并到另一个列表中的LINQ

15 浏览
0 Comments

将一个列表的部分合并到另一个列表中的LINQ

我正在尝试找出如何从一个列表中选择不同的值,然后将这些不同的值转置到另一个列表中。\n我有以下代码:\n模型:\n

public class Participant
{
    public int UserId { get; set; }
    public string Name { get; set; }
}

\n控制器代码:\n

List participants = new List();
participants = project
    .QuickView
    .Select(x => new Participant { x.UserId, x.FullName})
    .Distinct()
    .ToList();

\n这似乎可以获取到不同的UserId和FullName值,但不是我需要的List格式。我得到的是IEnumerable格式而不是List格式。我错过了什么,以便让LINQ将结果放入一个新的Participant列表中?

0
0 Comments

问题的原因是希望将一个列表的部分内容合并到另一个列表中,但是使用了不合适的方法。解决方法是使用自定义的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();

0