2011-11-08 7 views
1

レコード全体ではなく、特定の列の値によって異なるレコードを取得する簡単なLINQクエリはありますか?LINQ列の値によって固有の値が設定される

誰かが別の値でリストをフィルタリングする方法を知っていますか?

+0

あなただけのただの異なる列を返すようにしたいですか、または他の値も? –

答えて

2

最初に単一の値を選択し、次にDistinctを実行します。

レコード全体が必要な場合は、group x by into yを使用する必要があります。 FirstMaxAverageなどの適切な集計関数を見つけて、グループ内の他の値の1つを選択する必要があります。

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

2番目のクエリでオーダーを追加する方法は? –

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()); 
関連する問題