2012-04-25 45 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(); 

注意,你应该选择个人数据和它的作品。