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

时间:2015-09-28 19:21:27

标签: c# linq

我试图弄清楚如何从一个列表中选择不同的值,然后将这些不同的值转换到另一个列表。

我有这个:

型号:

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

控制器代码:

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

这似乎让我得到了不同的值UserId和FullName,但不是我需要的List格式。我得到一个IEnumerable格式而不是List格式。为了让LINQ将结果放入新的参与者列表,我缺少什么?

1 个答案:

答案 0 :(得分:1)

你真的不想使用选择。而是使用自定义IEqualityComparer与Distinct方法。像这样的东西

public class CustomEqualityComparer : IEqualityComparer<Participant>
{
    public bool Equals(Participant x, Participant y)
    {
        return x.UserId == y.UserId && x.Name == y.Name;
    }

    public int GetHashCode(Participant obj)
    {
        return new Tuple<int, string>(obj.UserId, obj.Name).GetHashCode();
    }
}

然后你的电话会是这样的:

participants = project.QuickView.Distinct(new CustomEqualityComparer()).ToList();