回答:
これを試して:
table1.GroupBy(x => x.Text).Select(x => x.FirstOrDefault());
これにより、テーブルがグループ化されText
、各グループの最初の行が使用され、Text
が異なる行になります。
table1.GroupBy(x => new { x.Text, x.Property2, x.Property3 }).Select(x => x.First());
GroupBy
空のグループを作成しません。以前のコメントを参照してください。ほとんどの場合、コードにはここに表示されている以上のものが含まれています。多分あなたはWhere
同様にまたはのための条件を持っていますFirst
。
MoreLinqにはDistinctByがあります使用できるメソッドがあります。
それはあなたができるようになります:
var results = table1.DistictBy(row => row.Text);
メソッドの実装(引数の検証を除く)は次のとおりです。
private static IEnumerable<TSource> DistinctByImpl<TSource, TKey>(IEnumerable<TSource> source,
Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
{
HashSet<TKey> knownKeys = new HashSet<TKey>(comparer);
foreach (TSource element in source)
{
if (knownKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
GroupBy
必要と同様に、いずれかが使用されます。EqualityComparer
何も指定されていない場合、どちらの方法でもデフォルトが使用されます。
しかし、r.textが複製されない結果が必要です
あなたがこれを望んでいるかのように聞こえます:
table1.GroupBy(x => x.Text)
.Where(g => g.Count() == 1)
.Select(g => g.First());
これにより、Text
が一意である行が選択されます。
上記のDaniel Hilgarthの答えは、Entity-FrameworkのSystem.NotSupported
例外につながります。エンティティフレームワーク、それがなければなりません。
table1.GroupBy(x => x.Text).Select(x => x.FirstOrDefault());