我想创建一个包含所有同名记录的数据网格。
我有这张桌子:
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
但我不知道如何创建此查询
答案 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
}
在一个简单的例子中,输出如下所示:
<强> //编辑:强>
如果您想按多列分组,可以使用以下语法:
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();
这将产生以下结果:
<强> // 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
应该做的工作。结果是使用按名称分组的一组值(商店)进行分组,其中组的键是商店的名称属性。
很抱歉,但发表评论的时间太长了。