2012-01-04 127 views
1

我收集了一個這樣的數據。在Linq查詢中選擇不同的

-------------------------------------------- 
| 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選擇不同的數據?

回答

5

您可以創建自己的comparier這樣的:

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()); 

我認爲,代碼可以優化,但總體思路呈現:)

6

隊長明顯說,你應該使用Distinct LINQ方法:-)

+1

確切的,但不要忘記ov執行RowObject上的Equals方法。如果您正在使用tablerows或某些東西,則可以將EqualityComparer賦予IEnumerable.Distinct()方法。 – Glenn 2012-01-04 12:19:40

+0

你能給我一個這個查詢的例子嗎? – Aroor 2012-01-04 12:25:42

+0

@nagg我如何在linq中使用不同的關鍵字? – Aroor 2012-01-04 12:27:37