2012-04-25 43 views
0

我在我的數據庫中有兩個表,Building和Town。他們是這樣的:Linq to SQL連接兩個表並填充GridView

大廈:

buildingid 
buildingname 

鎮:

id 
userid 
buildingid 

在城裏有每個構建一個用戶有一個條目。

我想要的是填充給定userid用戶的GridView。這個GridView應該包含建築物名稱和建築物數量。 建築物。我試過這個:

var buildings = (from Town in dc.Towns 
         join Building in dc.Buildings 
          on Town.buildingid equals Building.buildingid 
         select Building.buildingname); 
     gvBuildings.DataSource = buildings; 
     gvBuildings.DataBind(); 

但我不知道如何得到每個建築物的數字。


我已經在這裏工作了一段時間,你的一些答案工作。當我運行這段代碼我的GridView的最終看起來像這樣

var buildings = dc.Towns 
      .Where(t => t.userid == userid) 
      .GroupJoin(dc.Buildings, 
         t => t.buildingid, 
         b => b.buildingid, 
         (Town, Buildings) => new 
               { 
                BuildningName = Buildings.First().buildingname, 
                Count = Buildings.Count() 
               }); 
     gvBuildings.DataSource = buildings.ToList(); 
     gvBuildings.DataBind(); 

GridView

我需要在組中顯示的建築物,由buildingname分組我已經使用這個代碼。我試過所有的建議,但我不能得到它的工作。

+0

每個建築物的數量是每棟建築物的建築物數量或計數? – 2012-04-25 07:58:12

+0

@PranayRana爲了得到我需要統計的每個條目的數字,其中userid == parameterUserId和Buildingid == parameterBuildingid – Twistar 2012-04-25 08:04:37

+0

它似乎只需要添加一個條件,因爲您已經在構建ID上應用inne連接。 – 2012-04-25 08:10:45

回答

1

嘗試分組:

var buildings = dc.Towns 
        .Where(t => t.UserId == userId) 
        .GroupJoin(dc.Buildings, 
          t => t.BuildingId, 
          b => b.BuildingId, 
          (town, buildings) => new 
          { 
           BuildingName = buildings.First().BuildingName, 
           Count = buildings.Count 
          }); 

請記住,綁定到控件時,您必須提供類型(或實現)的集合IList。這可以通過在buildings收集調用ToList()來完成:

gvBuildings.DataSource = buildings.ToList(); 
gvBuildings.DataBind(); 
+0

這不會將結果組合在一起。此查詢的結果顯示在編輯的問題中。 – Twistar 2012-04-25 10:48:22

+0

@Twistar,在這種情況下,使用一個簡單的'Join'和一個'GroupBy'。 – RePierre 2012-04-25 13:40:33

1

檢查linq differed execution

,比試圖打擊代碼可能爲你工作

var buildings = 

(from j in dc.Town 
join i in dc.Buildings 
on j.buildingId equals i.buildingId 
where j.Userid = varUSerid 
group new {i, j} 
by new 
{ i.BuildingID } 
into 
g 
select new { 
    BuildingName = g.First<k=>k.BuildingName) 
    , count = g.Count() }).ToList(); 
    gvBuildings.DataSource = buildings; 
      gvBuildings.DataBind(); 
1
var buildings = (from Town in dc.Towns 
           join Building in dc.Buildings 
            on Town.buildingid equals Building.buildingid 
           into results 
           from r in results.DefaultIfEmpty() 
           group Town by new 
           { 
            r.BuildingId 
           } into groupedResults 
           where Town.UserID == parameteruserId 
           select new 
           { 
            BuildingName = Building.buildingname, 
            BuildingCount = groupedResults.Count() 
            }); 

試試這個..它應該工作..我有類似的要求..

+0

此行:BuildingCount = Building.Count()不起作用。似乎這將工作,如果我只知道在哪裏使用Count()語句。 – Twistar 2012-04-25 08:02:52

+0

如果需要按BuildingId進行分組,請檢查修改後的查詢。 – 2012-04-25 08:26:18

+0

Town.UserID == parameteruderId不能編譯的行。它告訴我:無法在靜態「上下文」中訪問非靜態屬性「userid」 – Twistar 2012-04-25 10:17:08

1
manDbDataContext db = new DbDataContext(); 

var estimatedTotal = ( from est in db.AssignmentEstimatedMaterials 
         where est.assignment_id == Convert.ToInt32(Label_assignmentId.Text) 
         join materialdetail in db.Materials on est.material_id equals materialdetail.material_id 
         select new { est.qty,est.total_amount, materialdetail.material_name}).ToList(); 

    GridView_estiamte_material.DataSource = estimatedTotal; 
    GridView_estiamte_material.DataBind(); 

注意,你應該選擇個人數據和它的作品。