2011-11-08 88 views
1

是否有一個簡單的LINQ查詢來獲取特定列值(而不是整個記錄)的不同記錄?LINQ按列值設置的區別

任何人都知道我可以如何過濾只有不同值的列表?

+0

你只想回到剛纔的不同列做,或其他值呢? –

回答

2

先選擇一個值然後運行Distinct。

(from item in table 
select item.TheSingleValue).Distinct(); 

如果你想要整個記錄你需要使用group x by into y。然後您需要找到一個合適的聚合函數,如First,Max,Average或類似的來選擇組中的其他值之一。

from item in table 
group item by item.TheSingleValue into g 
select new { TheSingleValue = g.Key, OtherValue1 = g.First().OtherValue1, OtherValue2 = g.First().OtherValue2 }; 
+0

聽起來像OP希望整個記錄被返回,但不僅僅是項目 – LukeH

3

您可以使用庫如morelinq來做到這一點。你會對DistinctBy()方法感興趣。

var query = records.DistinctBy(record => record.Column); 

否則,你可以手工做到這一點。

var query = 
    from record in records 
    group record by record.Column into g 
    select g.First(); 
+0

如何在第二個查詢中添加順序? –

0

你可以做的IEqualityComparer接口的實現:

public class MyObjectComparer : IEqualityComparer<MyObject> 
{ 
    public bool Equals(MyObject x, MyObject y) 
    { 
     return x.ColumnNameProperty == y.ColumnNameProperty; 
    } 
    public int GetHashCode(MyObject obj) 
    { 
     return obj.ColumnNameProperty.GetHashCode(); 
    } 
} 

並傳遞一個實例爲鮮明方法:

var distinctSource = source.Distinct(new MyObjectComparer());