如何在 Enumerable.Distinct() 中使用 lambda 表达式



我有一个可枚举的对象,我需要为其指定相等性。

var values = list.Distinct();

有没有办法在 Enumerable.Distinct() 中使用 lambda 表达式或一些等效的解决方法?

var values = list.Distinct((value1, value2) => value1.Id == value2.Id);

你可以,但你需要创建一个实现IEqualityComparer的类。 然后使用 Enumerable.Distinct Method (IEnumerable, IEqualityComparer)

不,你不能。你可以,就像@Hogan在他的回答中所说的那样(https://stackoverflow.com/a/22815177/806975)

此外,如果要区分特定字段,可以在Distinct之前使用 Select

list.Select(x => x.Id).Distinct();

但是,这将仅返回所选值 ( Id )。

根据@Patrick在上面的评论中提到的问题(Distinct() with lambda?),并尝试向其添加一些内容,您可以执行扩展方法来执行您想要的操作:

namespace MyProject.MyLinqExtensions
{
    public static class MyLinqExtensions
    {
        public static System.Collections.Generic.IEnumerable<TSource> DistinctBy<TSource, TKey>(this System.Collections.Generic.IEnumerable<TSource> list, System.Func<TSource, TKey> expr)
        {
            return list.GroupBy(expr).Select(x => x.First());
        }
    }
}

然后,您可以通过以下方式使用它:

list.DistinctBy(x => x.Id)

只需记住在要使用的类中导入命名空间:using MyProject.MyLinqExtensions;

相关内容

  • 没有找到相关文章

最新更新