Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到SQL连接两个表并填充GridView_C#_Asp.net_Linq To Sql_Gridview_Join - Fatal编程技术网

C# Linq到SQL连接两个表并填充GridView

C# Linq到SQL连接两个表并填充GridView,c#,asp.net,linq-to-sql,gridview,join,C#,Asp.net,Linq To Sql,Gridview,Join,我的数据库中有两个表,Building和Town。它们看起来像这样: 建筑: buildingid buildingname 城镇: 在城里,用户拥有的每栋建筑都有一个入口 我想要的是使用给定的用户ID为用户填充GridView。此网格视图应包括建筑物名称和建筑物数量。 建筑。我试过这个: var buildings = (from Town in dc.Towns join Building in dc.Buildings

我的数据库中有两个表,Building和Town。它们看起来像这样:

建筑:

buildingid
buildingname
城镇:

在城里,用户拥有的每栋建筑都有一个入口

我想要的是使用给定的用户ID为用户填充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();
但我不知道如何得到每栋楼的数字


我在这方面已经做了一段时间了,你的几个答案都很有用。我使用了以下代码:

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最终显示如下:

我需要将建筑物分组显示,按建筑物名称分组。我已经尝试了所有的建议,但都无法付诸实施。

检查

然后再试试吹代码可能对你有用

    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(); 
var建筑=
(来自华盛顿特区的j.Town)
加入我的特区大厦
关于j.buildingId等于i.buildingId
其中j.Userid=varUSerid
群新{i,j}
由新
{i.BuildingID}
进入
G
选择新{
BuildingName=g.Firstk.BuildingName)
,count=g.count()});
gvBuildings.DataSource=建筑物;
gvBuildings.DataBind();
检查

然后再试试吹代码可能对你有用

    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(); 
var建筑=
(来自华盛顿特区的j.Town)
加入我的特区大厦
关于j.buildingId等于i.buildingId
其中j.Userid=varUSerid
群新{i,j}
由新
{i.BuildingID}
进入
G
选择新{
BuildingName=g.Firstk.BuildingName)
,count=g.count()});
gvBuildings.DataSource=建筑物;
gvBuildings.DataBind();
试试这个。。它应该有用。。我也有类似的要求

试试这个。。它应该有用。。我也有类似的要求

尝试分组:

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();
尝试分组:

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();
注意,您应该选择单个数据,并且它可以工作



注意,你应该选择单独的数据,它就可以工作。

每个建筑的编号是建筑的id还是每个建筑的计数?@PranayRana要获得编号,我需要计算城镇中的每个条目,其中userid==parameterUserId和Buildingid==parameterBuildingidit似乎你只需要添加一个where条件,因为你已经在应用inne join on building id…试试我更新的解决方案我的答案可能对你有用…一些解决方案可以。但它不会按建筑名称对结果进行分组。我填充了GridView,但显示如下:兵营1,兵营1,兵营1,马厩1,archery 1.number of each buildin是建筑物的id还是计数?@PranayRana要获得数字,我需要计算城镇中的每个条目,其中userid==parameterUserId和Buildingid==parameterBuildingidit似乎您只需要添加一个where条件,因为您已经在建筑物id上应用inne连接…尝试解决方案我更新了我的答案,可能对你们有用……有几种解决方案可以。但它不会按建筑名称对结果进行分组。我填充了GridView,但其显示方式如下:营房1、营房1、营房1、马厩1、射箭1。此行:BuildingCount=Building.Count()不起作用。如果我只知道在何处使用Count()语句,这似乎就行了。如果需要按BuildingId进行分组,请检查修改后的查询。Town.UserID==parameteruderId不编译的行。它告诉我:无法访问静态“上下文”中的非静态属性“userid”,请取出该行并运行代码。。它是否将结果绑定到datagridDeleted该行,但在select STATION:DISQUICE调用中仍然存在错误,而且Building.buildingname与上面的错误相同..此行:BuildingCount=Building.Count()不起作用。如果我只知道在何处使用Count()语句,这似乎就行了。如果需要按BuildingId进行分组,请检查修改后的查询。Town.UserID==parameteruderId不编译的行。它告诉我:无法访问静态“上下文”中的非静态属性“userid”,请取出该行并运行代码。。它是否将结果绑定到该行的datagridDeleted,但在select STATTION:DISQUICE调用中仍然存在错误,而且Building.buildingname与上面的错误相同。这不会将结果分组在一起。此查询的结果显示在已编辑的问题中。@Twistar,在这种情况下,请使用简单的
Join
,后跟
GroupBy
。这不会将结果分组在一起。此查询的结果显示在已编辑的问题中。@Twistar,在这种情况下,请使用简单的
Join
,后跟
GroupBy