• EF之通过不同条件查找去重复


    Enumerable.Distinct<TSource> Method(IEnumerable<TSource>, IEqualityComparer<TSource>)

    也就是使用的Distinct(参数1,参数2);

    参数1为原数据,参数2为比较数据

    通过IEqualityComparer<T> 来比较值从而返回不同的序列。

    引用的名称空间:System.Linq

    程序集:System.Core (在 System.Core.dll下)

    语法:

    public static IEnumerable<TSource> Distinct<TSource>(
        this IEnumerable<TSource> source,
        IEqualityComparer<TSource> comparer
    )

    参数:

    原数据:

    类型:System.Collections.Generic.IEnumerable<TSource>
    指的是从中删除重复元素的序列

    比较数据:

    类型 : System.Collections.Generic.IEqualityComparer<TSource>
    这个是与原数据的比较值

    返回数据:

    类型: System.Collections.Generic.IEnumerable<TSource>
    返回原数据中不重复的序列

    当给的参数为空时抛出的异常:

    ArgumentNullException

    备注:

    该方法通过使用延迟执行来实现。 立即返回值是存储执行操作所需的所有信息的对象。 通过直接调用其GetEnumerator方法或在Visual C#或Visual Basic中使用foreach进行枚举,直到对象被枚举为止,才执行此方法所表示的查询。
    不同的<TSource>(IEnumerable <TSource>,IEqualityComparer <TSource>)方法返回一个无序的序列,不包含重复的值。 如果comparer为null,则使用默认的等式比较器Default来比较值。

    示例:

    以下示例显示如何实现可在Distinct <TSource>方法中使用的等式比较器。

    public class Product
    {
        public string Name { get; set; }
        public int Code { get; set; }
    }
    
    // 产品类的自定义比较器
    class ProductComparer : IEqualityComparer<Product>
    {
        // 如果产品的名称和产品编号相同,则产品相同
        public bool Equals(Product x, Product y)
        {
    
            //检查比较对象是否引用相同的数据
            if (Object.ReferenceEquals(x, y)) return true;
    
            //检查所比较的对象是否为空
            if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
                return false;
    
            //检查产品的属性是否相等
            return x.Code == y.Code && x.Name == y.Name;
        }
    
        // 如果Equals()对一对对象返回true
        // 那么GetHashCode()必须为这些对象返回相同的值。那么GetHashCode()必须为这些对象返回相同的值。
    
        public int GetHashCode(Product product)
        {
            //检查该对象是否为空
            if (Object.ReferenceEquals(product, null)) return 0;
    
            //如果它不为空,获取名称字段的
    hashCode
     int hashProductName = product.Name == null ? 0 : product.Name.GetHashCode(); //获取代码字段的hashCode int hashProductCode = product.Code.GetHashCode(); //计算产品的hashCode return hashProductName ^ hashProductCode; } }

    实现此比较器后,可以使用Distinct <TSource>方法中的一系列Product对象,如以下示例所示。

    Product[] products = { new Product { Name = "apple", Code = 9 }, 
                           new Product { Name = "orange", Code = 4 }, 
                           new Product { Name = "apple", Code = 9 }, 
                           new Product { Name = "lemon", Code = 12 } };
    
    //排除重复
    
    IEnumerable<Product> noduplicates =
        products.Distinct(new ProductComparer());
    
    foreach (var product in noduplicates)
        Console.WriteLine(product.Name + " " + product.Code);
    
    /*
        返回的值如下:
        apple 9 
        orange 4
        lemon 12
    */
  • 相关阅读:
    随笔练习
    获得屏幕相关的辅助类
    C# 下sqlite简单使用
    XP系统下 VS2010 选中行崩溃
    Custome Buble Data Point
    RIA
    Chart Style
    d3js
    TreeView
    [Java入门笔记] Java语言简介
  • 原文地址:https://www.cnblogs.com/LessIsMoreZ/p/7026091.html
Copyright © 2020-2023  润新知