2012-04-27 125 views
0

我在我的数据库中的两个表:LINQ到SQL连接和组

镇:

userid, buildingid 

大厦:

buildingid, buildingname 

我要的是填充这样一个GridView:

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

回答

1
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()} 

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

+0

我知道它的工作原理,请参阅编辑的新代码=)谢谢! – Twistar 2012-04-27 09:19:52

0

岂不是这样做呢?

Users 
    .Select(User => new {User, User.Building}) 
    .GroupBy(x => x.Building) 
    .Select(g=> new {Building = g.Key, Count = g.Count()}) 
+0

林不知道,但是,这是否取代我已经有的查询? – Twistar 2012-04-27 08:59:45

-2

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

而不是纯SQL的选项,我将“Linqu to SQL”看作是获取SQL数据集的硬类型对象表示的工具。而已。

希望它可以帮助你。