0

我的数据库中有两个表:

镇:

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

3 回答 3

0

这样的事情不会做吗?

Users
    .Select(User => new {User, User.Building})
    .GroupBy(x => x.Building)
    .Select(g=> new {Building = g.Key, Count = g.Count()})
于 2012-04-27T08:55:50.370 回答
0
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()}

我认为应该这样做。我没有测试过它,所以它可能会出错,但它会是这样的。

于 2012-04-27T08:58:06.850 回答
-2

根据我使用 Linq to SQL 的经验,当表达式变得复杂时,最好编写一个存储过程并使用 Linq to SQL 调用它。通过这种方式,您可以获得更好的可维护性和可升级性。

我认为“Linqu to SQL”不是纯 SQL 的一种选择,而是一种获取 SQL 数据集的硬类型对象表示的工具。而已。

希望它可以帮助你。

于 2012-04-27T09:12:34.320 回答