C#Linq-如何从集合中获取不同的集合

时间:2013-12-05 10:27:23

标签: c# .net linq

我有以下收藏:

public IList<Emp> EmpList()
{
    IList<Emp> empList = new List<Emp>();
    empList.Add(new Emp() { Id = 1, Name = "abc1" });
    empList.Add(new Emp() { Id = 1, Name = "abc2" });        
    empList.Add(new Emp() { Id = 2, Name = "abc3" });
    empList.Add(new Emp() { Id = 2, Name = "abc4" });
    empList.Add(new Emp() { Id = 4, Name = "abc5" });
    return empList;
}

我希望根据EmpList()集合中的ID获取不同的记录。我的意思是EmpList()集合中的第一行,第三行和最后一行。

非常感谢任何帮助。

编辑 - var empList = emp.EmpList().GroupBy(x => x.Id).Select(x => x.First()); 此查询适用于解决方案。

2 个答案:

答案 0 :(得分:4)

var q = from e in empList
        group e by e.Id into grps
        select grps.First();

答案 1 :(得分:3)

您可以使用此MoreLINQ

public static IEnumerable<TSource> DistinctBy<TSource, TKey>
    (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
    HashSet<TKey> seenKeys = new HashSet<TKey>();
    foreach (TSource element in source)
    {
        if (seenKeys.Add(keySelector(element)))
        {
            yield return element;
        }
    }
}

并使用它:

return empList.DistinctBy(x => x.Id).ToList();