2

IEqualityComparer クラスを作成せずに、 Linq を使用してコレクションから要素の個別のセットを選択したいと考えています。で使用する IEqualityComparer として評価されるラムダ式を作成する方法がわかりませんDistinct()。そのため、グループ化を使用して、たとえば、異なる名前を持つ顧客を選択しました。

var distinctCustomers = new List<Customer>();
var groups= customers.GroupBy (cust => cust.Name);
foreach (var g in groups)
{
  foreach (var customer in g)
  {
    distinctCustomers.Add (customer);
    break;
  }
}

しかし、これは厄介なようです。

Distinctラムダ式で使用したい

var distinctCustomers = customers.Distinct ( <lambda here ?> )

または上記よりもクリーンな Linq 式。

何か案は?

4

2 に答える 2

5

a を再実装したくないDistinctBy(またはMoreLINQ のようなものを使用したくない) 場合は、各グループ内の最初の要素を選択するだけGroupByの aを介してこれを行うことができます。Select

var distinctCustomers = customers.GroupBy(cust => cust.Name).Select(g => g.First());
于 2012-11-12T18:36:08.843 に答える
1

DistinctBy メソッドを持つ Jon Skeet のMoreLINQを使用します。または、それをコードに実装します。

IEnumerable<Customer> distinctCustomers = customers.DistinctBy(c => c.Name);
于 2012-11-12T18:35:27.550 に答える