`

Linq扩展方法过滤重复记录

    博客分类:
  • Linq
阅读更多

1.扩展类
   /// <summary>
        /// 根据字段过滤重复的数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class Comparint<T> : IEqualityComparer<T> where T : class, new()
        {
            private string[] comparintFiledName = { };

            public Comparint() { }
            public Comparint(params string[] comparintFiledName)
            {
                this.comparintFiledName = comparintFiledName;
            }

            bool IEqualityComparer<T>.Equals(T x, T y)
            {
                if (x == null && y == null)
                {
                    return false;
                }
                if (comparintFiledName.Length == 0)
                {
                    return x.Equals(y);
                }
                bool result = true;
                var typeX = x.GetType();//获取类型
                var typeY = y.GetType();
                foreach (var filedName in comparintFiledName)
                {
                    var xPropertyInfo = (from p in typeX.GetProperties() where p.Name.Equals(filedName) select p).FirstOrDefault();
                    var yPropertyInfo = (from p in typeY.GetProperties() where p.Name.Equals(filedName) select p).FirstOrDefault();

                    result = result
                        && xPropertyInfo != null && yPropertyInfo != null
                        && xPropertyInfo.GetValue(x, null).ToString().Equals(yPropertyInfo.GetValue(y, null));
                }
                return result;
            }
            int IEqualityComparer<T>.GetHashCode(T obj)
            {
                return obj.ToString().GetHashCode();
            }
        }


2.使用

            this.ddlCompanyName.AppendDataBoundItems = true;
            this.ddlCompanyName.Items.Add(new ListItem("请选择", "-1"));
            IList<HLS.PCS.Model.T_SalesOrg> lst = GetCompanyList();
            this.ddlCompanyName.DataSource = lst.Distinct(new Comparint<HLS.PCS.Model.T_SalesOrg>("CompanyID")).ToList();
1
2
分享到:
评论

相关推荐

    LINQ to SQL手册

    21. **User-Defined Functions**:创建和使用自定义函数以扩展 LINQ to SQL 的功能。 22. **DataContext**:`DataContext` 类是 LINQ to SQL 的核心,它封装了与数据库的会话,并负责对象的持久化。 23. **Dynamic...

    Linq to sql公共方法资源基类

    通过创建这样一个基类,我们可以将数据库操作的逻辑封装起来,使代码更易于维护和扩展,并减少重复代码。 "Expression"在LINQ中的角色至关重要。它是.NET Framework中表达树类型的代表,用于表示代码的结构,而非...

    linq to sql 学习笔记

    以上内容涵盖了 LINQ to SQL 的基础使用,包括匿名类型、扩展方法、lambda 表达式以及 LINQ 查询的基本操作。在实际开发中,通过这些技术可以方便地操作数据库,执行查询、过滤、排序、分组等操作,大大提高了开发...

    LINQ语句[文].pdf

    1. **获取唯一字段**:`Distinct()`方法可以去除重复项,如: ```csharp var makes = (from c in myCars select c.Make).Distinct(); ``` 2. **调用扩展函数**:可以直接在查询表达式中调用`Enumerable`类的扩展...

    LINQ查询符列表[文].pdf

    在实际使用中,通常需要将LINQ查询表达式括在括号内,并转换为`IEnumerable&lt;T&gt;`兼容的对象,以便调用这些扩展方法。例如: ```csharp static void GetCount(){ string[] currentVideoGames = {"Morrowind", ...

    asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析

    3. 查询操作:可以进行整表查询、部分字段查询、排序、分组、过滤重复记录等操作。例如,使用 from c in Student select c; 进行整表查询;使用 from c in Student where c.name == "张三" select c; 来查询特定条件...

    C#基类/工具类

    例如,`System.Linq.Enumerable`中的`Where`和`Select`方法。 - 集合操作:工具类常提供对集合(如数组、列表)的操作,如查找、排序、过滤、分组等。 - 字符串处理:例如`System.Text.RegularExpressions`类库...

    ASP.NET.3.5开发大全

    - 新特性:自动属性、匿名类型、扩展方法、查询表达式等。 - **面向对象编程(OOP)** - 基本概念:封装、继承、多态。 - 在 ASP.NET 中的应用实践。 #### 二、ASP.NET 控件详解 - **基础控件** - 文本框...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    9.1.3 重复值绑定 9.2 数据源控件 9.3 SqlDataSource 9.3.1 选择记录 9.3.2 参数化命令 9.3.3 错误处理 9.3.4 更新记录 9.3.5 删除记录 9.3.6 插入记录 9.3.7 SqlDataSource的不足 9.4 ...

    提高C#编程的50个要点

    10. **扩展方法**:通过扩展方法为现有类型添加新功能,不改变原有类型。 11. **属性(Property)**:使用属性代替公共字段,提供访问控制和自动化的getter/setter。 12. **构造函数**:理解类的构造函数,包括...

    ASP.NET4高级程序设计(第4版) 3/3

    9.1.3 重复值绑定 271 9.2 数据源控件 277 9.3 SqlDataSource 278 9.3.1 选择记录 279 9.3.2 参数化命令 281 9.3.3 错误处理 285 9.3.4 更新记录 286 9.3.5 删除记录 289 9.3.6 插入记录 289 ...

    winform combobox 模糊查询

    在Windows Forms应用程序中,ComboBox控件是常用的交互元素,它允许用户从一组预定义的选项中选择一个。...在实际开发中,可以根据项目需求对这个基础实现进行优化和扩展,比如添加错误处理、增加搜索历史记录等。

Global site tag (gtag.js) - Google Analytics