在Linq查询中选择distinct

时间:2012-01-04 12:10:49

标签: c# asp.net vb.net linq visual-studio-2010

我有一个包含这样数据的集合。

-------------------------------------------- 
|  key   | customer Name | code | isActive | 
--------------------------------------------
| 30002  |    XYZ        | 234  |     1    |
--------------------------------------------
| 30002  |    XYZ        | 234  |     1    |
--------------------------------------------
| 30002  |    XYZ        | 234  |     1    |
--------------------------------------------
| 30034  |    ERR        | 344  |     1    |
--------------------------------------------
| 30031  |    LDD        | 343  |     1    |
--------------------------------------------

如何使用linq选择不同的数据?

2 个答案:

答案 0 :(得分:6)

船长明显说你应该使用Distinct linq方法: - )

答案 1 :(得分:5)

您可以像这样创建自己的比较器:

public class MyComparer : IEqualityComparer<DataRow>
    {
        public bool Equals(DataRow x, DataRow y) {
            return x["col1"] == y.["col1"] && x["col2"] == y.["col2"];
        }

        public int GetHashCode(DataRow obj) {
            return obj["col1"].GetHashCode() ^ obj["col2"].GetHashCode();
        }
    }

然后使用:

var distinctRows = (from dr in table.AsEnumerable()
select dr).Distinct(new MyComparer());

我认为可以优化代码,但总体思路如下:)