7

次の要件を満たすために、C#/LINQ を使用してクエリを設計するための助けを求めています。

私は会社のリストを持っています:-

Id  Name                Email       Address

1   Company A         a@a.com       abc

2   Company B         b@b.com       abc

3   Company C         c@c.com       abc

4   Company D         d@d.com       abc

5   Company A         a@a.com       abc

私の目標は、この例では「名前」と「電子メール」の 2 つのフィールドに基づいて重複アイテムを検出することです。

望ましい出力は、以下に示す顧客のリストです。

  1. 重複する顧客は 1 回だけ表示する必要があります
  2. 類似レコードの数が表示されます。

望ましい重複リスト:-

Id  Qty Name        Email       Address

1   2   Company A       a@a.com     abc (Id/details of first)

2   1   Company B       b@b.com     abc

3   1   Company C       c@c.com     abc

4   1   Company D       d@d.com     abc
4

2 に答える 2

9

重複の各セットで最小 ID レコードを明示的に使用する場合は、次を使用できます。

var duplicates = companies
    .GroupBy(c => new { c.Name, c.Email })
    .Select(g => new { Qty = g.Count(), First = g.OrderBy(c => c.Id).First() } )
    .Select(p => new
        {
            Id = p.First.Id,
            Qty = p.Qty,
            Name = p.First.Name,
            Email = p.First.Email,
            Address = p.First.Address
        });

どのレコードの値が使用されているか気にしない場合、またはソースが既に ID (昇順) で並べ替えられている場合は、OrderBy呼び出しをドロップできます。

于 2012-11-05T11:11:50.023 に答える
4
from c in companies
group c by new { c.Name, c.Email } into g
select new
{
   Id = g.First().Id,
   Qty = g.Count(),
   Name = g.Key.Name,
   Email = g.Key.Email,
   Address = g.First().Address
};
于 2012-11-05T11:14:31.587 に答える