0

データベースには Building と Town という 2 つのテーブルがあります。それらは次のようになります。

建物:

buildingid
buildingname

街:

id
userid
buildingid

タウンでは、ユーザーが所有する建物ごとに 1 つのエントリがあります。

私が欲しいのは、特定のユーザー ID を持つユーザーの 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();

しかし、各建物の番号を取得する方法がわかりません。


私はこれにしばらく取り組んでおり、いくつかの回答が機能しています。私はこのコードを使用しました:

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 は次のようになります。 グリッドビュー

建物名でグループ化されたグループで建物を表示する必要があります。私はすべての提案を試しましたが、うまくいきません。

4

4 に答える 4

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

コントロールにバインドするときは、 type (または実装) のコレクションを提供する必要があることに注意してくださいIListToList()これは、buildingsコレクションを呼び出すことで実現できます。

gvBuildings.DataSource = buildings.ToList();
gvBuildings.DataBind();
于 2012-04-25T08:08:25.593 に答える
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();

個々のデータを選択する必要があることに注意してください。

于 2012-11-01T11:32:30.057 に答える
1

linqの異なる実行を確認する

ブローコードを試すよりもうまくいくかもしれません

    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(); 
于 2012-04-25T07:44:47.530 に答える
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()
                                  });

これを試してください..うまくいくはずです..同様の要件があります..

于 2012-04-25T07:47:46.113 に答える