我有以下收藏:
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());
此查询适用于解决方案。
答案 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();