好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
LINQ的Distinct()在特定属性上的使用 关闭 返回上一级  

LINQ的Distinct()在特定属性上的使用
+ 查看更多

发布日期:2018-02-23 10:27
分类:C#
浏览次数:165
我正在使用LINQ来了解它,但是当我没有一个简单的列表(简单的整数列表很容易做,这不是问题)时,我不知道如何使用Distinct。 我想如何在对象的一个或多个属性的对象列表上使用Distinct?
示例:如果一个对象是Person,具有Property Id。 如何使用对象的属性Id获取所有人并对其使用不同之处?
Person1:Id = 1,Name =“Test1”
Person2:Id = 1,Name =“Test1”
Person3:Id = 2,Name =“Test2”
我如何才能获得Person1和Person3?
如果LINQ是不可能的,根据.NET 3.5中的一些属性,有什么是Person的列表的最佳方式?
 
 
回答:
 
你需要的是有效的“distinct-by”。 我不相信它是LINQ的一部分,尽管它写得很容易:
public static IEnumerable DistinctBy
    (this IEnumerable source, Func keySelector)
{
    HashSet seenKeys = new HashSet();
    foreach (TSource element in source)
    {
        if (seenKeys.Add(keySelector(element)))
        {
            yield return element;
        }
    }
}
使用id属性找到distinct值:
var query = people.DistinctBy(p => p.Id);
并且要使用多个属性,可以使用匿名类型来实现相等的实现:
var query = people.DistinctBy(p => new { p.Id, p.Name });
未测试,但它应该可以(至少可以编译)。
 
它假定键的默认比较器 - 如果要传递一个等式比较器,只需将其传递给HashSet构造函数。
上一篇没有了
在C#中重复一个字符的最佳方法下一篇
下一篇在C#中重复一个字符的最佳方法

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号