泛型List去除重复指定字段 利用了Linq

来源:互联网 发布:mac jenkins slaver 编辑:程序博客网 时间:2024/05/08 10:34

1、自己写的一个demo,记录下来,按照编码ID去除的重复

.aspx中

<div>
        <asp:Repeater ID="rpTest" runat="server">
            <ItemTemplate>
                <font color="red">编号</font>:<%#Eval("ID") %>
                &nbsp;&nbsp;&nbsp;<font color="red">名称</font>:<%#Eval("Name") %>
                &nbsp;&nbsp;&nbsp;<font color="red">描述</font>:<%#Eval("Info") %><br />
            </ItemTemplate>
        </asp:Repeater>
        <br />
        &nbsp;&nbsp;
        <asp:Button ID="btnOK" runat="server" Text="去除重复" OnClick="btnOK_Click" />
        &nbsp;&nbsp; &nbsp;&nbsp;<asp:Button ID="btnOKs" runat="server" Text="原始数据"
            onclick="btnOKs_Click" />
 </div>

.cs文件中

这里别忘了引用using System.Linq;否则Distinct()函数找不到

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            rpTest.DataSource = DataBind();
            rpTest.DataBind();
        }
    }

    #region 数据绑定
    public List<Test> DataBind()
    {
        List<Test> list = new List<Test>();
        Test t = new Test();
        t.ID = 100;
        t.Name = "测试1";
        t.Info = "描述1";
        list.Add(t);
        Test t1 = new Test();
        t1.ID = 200;
        t1.Name = "测试2";
        t1.Info = "描述2";
        list.Add(t1);
        Test t2 = new Test();
        t2.ID = 100;
        t2.Name = "测试3";
        t2.Info = "描述3";
        list.Add(t2);
        Test t3 = new Test();
        t3.ID = 200;
        t3.Name = "测试4";
        t3.Info = "描述4";
        list.Add(t3);
        return list;
    }
    #endregion

    #region 按钮事件
    protected void btnOK_Click(object sender, EventArgs e)
    {
        rpTest.DataSource = DataBind().Distinct(new CompanyNameComparer()).ToList();
        rpTest.DataBind();
    }
    protected void btnOKs_Click(object sender, EventArgs e)
    {
        rpTest.DataSource = DataBind();
        rpTest.DataBind();
    }
    #endregion

    #region 重写比较方法
    public class CompanyNameComparer : IEqualityComparer<Test>
    {
        public bool Equals(Test x, Test y)
        {
            if (x == null)
                return y == null;
            return x.ID == y.ID;
        }

        public int GetHashCode(Test obj)
        {
            if (obj == null)
                return 0;
            return obj.ID.GetHashCode();
        }
    }
    #endregion

    #region 实体
    public class Test
    {
        private int m_ID;

        public int ID
        {
            get { return m_ID; }
            set { m_ID = value; }
        }

        private string m_Name;

        public string Name
        {
            get { return m_Name; }
            set { m_Name = value; }
        }

        private string m_Info;

        public string Info
        {
            get { return m_Info; }
            set { m_Info = value; }
        }
    }
    #endregion

demo图


去除重复后


原创粉丝点击