C# C Linq-如何从集合中获取不同的集合
我有以下收藏:C# C Linq-如何从集合中获取不同的集合,c#,.net,linq,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,
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.GroupByx=>x.Id.Selectx=>x.First;
此查询对于解决方案运行良好。您可以从
是否有其他解决方案,因为我不想使用MoreLinq。@mnm您可以将此代码粘贴为扩展方法,并按照我的建议使用它。要使用扩展方法,您需要有静态类:EnumerableExtensions并将此方法放在那里!wudzik,是的,我得到了它,但在这里我粘贴了示例,但在实际场景中,我必须在Vb.Net中实现它,我猜Vb.Net不支持扩展方法:@mnm,嗯?当然VB.Net支持扩展方法。@mnm在这里查找VBM中的扩展方法。这是不完整的,因为问题没有提供更多信息。人们为什么毫无理由地否决投票???是的,它不是编译:+1来吧,打字错误太明显了。只是grp上缺少一个s。现在的人难道不能思考吗?分组并获取每个组的第一个元素是一种简单的方法来完成一个不同的任务。
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();
var q = from e in empList
group e by e.Id into grps
select grps.First();