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

本文关键字:列表 合并 另一个 LINQ 一个 | 更新日期: 2023-09-27 18:14:50

我正试图找出如何从一个列表中选择不同的值,然后将这些不同的值转置到另一个列表。

我有这个:

模型:

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,但不是在我需要的列表格式。我得到一个IEnumerable格式,而不是List格式。我错过了什么让LINQ把结果放在一个新的参与者列表?

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

你真的不想使用select。相反,使用带有Distinct方法的自定义IEqualityComparer。像这样

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();