[英]Linq to SQL join and group
我的数据库中有两个表:
镇:
userid, buildingid
建造:
buildingid, buildingname
我想要的是像这样填充GridView:
但是我不希望建筑物显示多次。 这是我的代码:
var buildings = dc.Towns
.Where(t => t.userid == userid)
.GroupJoin(dc.Buildings,
t => t.buildingid,
b => b.buildingid,
(Towns, Buildings) => new
{
BuildningName = Buildings.First().buildingname,
Count = Towns.Building.Towns.Count()
});
gvBuildings.DataSource = buildings.ToList();
gvBuildings.DataBind();
有效的新代码:
var buildings = (from t in dc.Towns
where t.userid == userid
join b in dc.Buildings
on t.buildingid equals b.buildingid
into j1
from j2 in j1.DefaultIfEmpty()
group j2 by j2.buildingname
into grouped
select new
{
buildingname = grouped.Key,
Count = grouped.Count()
});
gvBuildings.DataSource = buildings.ToList();
gvBuildings.DataBind();
var buildings = from t in dc.Towns
join b in dc.Buildings on t.buildingid equals b.buildingid into j1
from j2 in j1.DefaultIfEmpty()
group j2 by b.buildingname into grouped
select new { buildingname = grouped.key, Count = grouped.Count()}
我认为应该这样做。 我还没有测试过它,所以它可能会出错,但是会是这样。
这样不是吗?
Users
.Select(User => new {User, User.Building})
.GroupBy(x => x.Building)
.Select(g=> new {Building = g.Key, Count = g.Count()})
根据我在Linq to SQL中的经验,当表达式变得复杂时,最好编写一个存储过程,然后使用Linq to SQL对其进行调用。 这样,您可以获得更好的可维护性和可升级性。
我不是使用纯SQL的选项,而是将“ Linqu to SQL”看作是获取SQL数据集的硬类型对象表示的工具。 而已。
希望对您有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.