2012-04-27 122 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數據集的硬類型對象表示的工具。而已。

希望它可以幫助你。