使用Entity Framework查找SQL表中的所有重复记录

时间:2013-09-23 09:35:01

标签: c# sql entity-framework

我想创建一个包含所有同名记录的数据网格。

我有这张桌子:

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

但我不知道如何创建此查询

3 个答案:

答案 0 :(得分:14)

如果您使用Entity Framework,我假设您也使用LINQ。

在这种情况下,请尝试这种方式:

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

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

在一个简单的例子中,输出如下所示: Linqpad example

<强> //编辑:

如果您想按多列分组,可以使用以下语法:

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();

答案 1 :(得分:2)

尝试这种方式:

select name, adress, city
from tab
where name in ( select name
                from tab
                group by name
                having count(name) >1 )

答案 2 :(得分:1)

var groupedByName = from shop in Shops
                    group shop by new shop.Name into grp
                    where grp.Count() > 1
                    select grp

应该做的工作。结果是使用按名称分组的一组值(商店)进行分组,其中组的键是商店的名称属性。

很抱歉,但发表评论的时间太长了。