2013-09-23 9 views
5

同じ名前のすべてのレコードを含むデータグリッドを作成したいとします。Entity FrameworkでSQLテーブル内の重複レコードをすべて検索します

私は、このテーブルがあります。

Shop 
ID name   adress   city 
----------------------------------------- 
1 name1   adress 1   city1 
2 name 2  adress2   city2 
3 name 2   
4 name 2       city2 
5 name 3   
6 name 4  adress4   city4 
7 name 4  adress4   city4 

と私のデータグリッドが含まれている必要があります

2 name 2  adress2   city2 
3 name 2   
4 name 2       city2 
6 name 4  adress4   city4 
7 name 4  adress4   city4 

をしかし、私はこの方法試してみてください。このクエリ

答えて

12

yo Entity Frameworkを使用する私はLINQも使用すると仮定します。あなたがしたい場合

、それをこのようにしてみてくださいその場合は: Linqpad example

// EDIT:

var duplicates = Shop.GroupBy(i => i.Name) 
        .Where(x => x.Count() > 1) 
        .Select(val => val.Key); 

foreach(var item in duplicates) 
{ 
    //process 
} 

簡単な例では、出力は次のようになります。複数の列でグループ化するには、次の構文を使用できます。

var query = (from sh in Shop 
    group sh by new {sh.Name, sh.Address, sh.City} into grp 
    select new 
    { 
     name = grp.Key.Name, 
     address = grp.Key.Address, 
     city = grp.Key.City 
    }).ToList() 
     .GroupBy(q => q.name) 
     .Where (q => q.Count() >1) 
     .Dump(); 

これは、次になります:

second result

// EDIT2: 時々私は境界線愚かです。 KISS-原則に従い :

var query = Shop.GroupBy (s => s.Name).Where (s => s.Count() > 1).Dump(); 
+0

私がそれを好きなら、私は重複レコードによってただ1つの行を持っています。しかし私はすべての私の重複レコードを見たいと思うレコードを選択してください。 –

+0

最初のクエリグループは名前だけで、私の "画像例"に示されているようにすべて重複しています。もしあなたが私たちにいくつかのコードを提供できれば、おそらくエラーが見つかる可能性があります。 – Marco

+0

エラーはありません。それは私が望むものではありません。あなたが私の例文を読めば、私の結果に重複する行の詳細がほしいと思うことが分かります。あなたの例で私は:{3,3,4,4,6,6,7,7 ...} –

2

を作成する方法は考えていません:

select name, adress, city 
from tab 
where name in (select name 
       from tab 
       group by name 
       having count(name) >1) 
1
var groupedByName = from shop in Shops 
        group shop by new shop.Name into grp 
        where grp.Count() > 1 
        select grp 

は、作業を行う必要があります。結果は、グループのKeyがShopのNameプロパティであるNameでグループ化された値セット(Shops)を持つIgroupingです。

申し訳ありませんが、コメントに記載するには時間がかかりすぎました。

+0

これは重複を考慮していないので、 'where句'を追加する必要があります – Marco

+0

あなたは正しいですwhere句を忘れてしまった、Servに感謝します – ilmatte

関連する問題