首页 > C# > 一个或多个属性上使用什么?Distinct DistinctList TElement

一个或多个属性上使用什么?Distinct DistinctList TElement

上一篇 下一篇

我正在使用 LINQ 来了解它,但是当我没有简单的列表时,我无法弄清楚如何使用(简单的整数列表很容易做到,这不是问题)。我想在 的一个或多个属性上使用什么?DistinctDistinctList<TElement>TElement

示例:如果对象是 ,则带有属性 。如何获取所有内容并使用对象的属性?PersonIdPersonDistinctId

Person1: Id=1, Name="Test1"
Person2: Id=1, Name="Test1"
Person3: Id=2, Name="Test2"

我怎样才能得到公正和?这可能吗?Person1Person3

如果 LINQ 无法实现,那么根据其某些属性列出列表的最佳方法是什么?Person

分割线

网友回答:

编辑:这现在是MoreLINQ的一部分。

你需要的是一个有效的“区分”。我不相信它是 LINQ 的一部分,尽管编写起来相当容易:

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;
        }
    }
}

因此,若要仅使用属性查找非重复值,可以使用:Id

var query = people.DistinctBy(p => p.Id);

要使用多个属性,可以使用匿名类型,这些类型适当地实现相等:

var query = people.DistinctBy(p => new { p.Id, p.Name });

未经测试,但它应该可以工作(现在至少可以编译)。

不过,它假定键的默认比较器 – 如果要传入相等比较器,只需将其传递给构造函数即可。HashSet

分割线

网友回答:

如果我想基于一个或多个属性获取不同的列表,该怎么办?

简单!您想对他们进行分组并从组中选出一个获胜者。

List<Person> distinctPeople = allPeople
  .GroupBy(p => p.PersonId)
  .Select(g => g.First())
  .ToList();

如果要在多个属性上定义组,方法如下:

List<Person> distinctPeople = allPeople
  .GroupBy(p => new {p.PersonId, p.FavoriteColor} )
  .Select(g => g.First())
  .ToList();

注意:某些查询提供程序无法解析每个组必须至少有一个元素,并且 First 是在这种情况下调用的适当方法。如果您发现自己正在使用此类查询提供程序,FirstOrDefault 可能会帮助您通过查询提供程序获取查询。

注意 2:对于 EF 核心(在 EF Core 6 之前)兼容的方法,请考虑此答案。https://stackoverflow.com/a/66529949/8155

分割线

网友回答:

用:

List<Person> pList = new List<Person>();
/* Fill list */

var result = pList.Where(p => p.Name != null).GroupBy(p => p.Id)
    .Select(grp => grp.FirstOrDefault());

帮助您过滤条目(可能更复杂)和执行不同的功能。wheregroupbyselect

模板简介:该模板名称为【一个或多个属性上使用什么?Distinct DistinctList TElement】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 252次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-15
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
html5 微信素材 单页式简历模板 响应式 微信文章 微信图片 微信模板 微信公众平台 自适应 企业网站
您可能会喜欢的其他模板