2017-08-04 10 views
0

DBデザイナーの請負業者は、テーブル:ActualUsesと中間/一時テーブル:EstimatedUsesを持つデータベースを持っています。テーブルは、PKを除いて全く同じです。 (ActualUsesのActualUsesKey、EstimatedUsesのEstimatedUsesKey)。その他の列はすべて名前とデータ型に一致します。類似の2つのテーブルからすべての行を選択

私は両方のテーブルのすべての行をGridViewに表示することになっています。

テーブルは、IDの上に名前をプルするためにいくつかの他のテーブルにリンクしているので、LINQを使用するときは匿名タイプを作成する必要があります。 1つのLINQクエリで必要なものをすべてプルする方法はありますか、各テーブルを個別に取得してDataTableにロードし、そのテーブルをGridViewにバインドする必要がありますか? (C#インタラクティブウィンドウを使用して)

答えて

1

連合:

> public class AClass { public string A { get; set; } public int B { get; set; } } 
> public class BClass { public string A { get; set; } public int C { get; set; } } 
> var x = new List<AClass> { new AClass { A = "a", B = 1 }, new AClass { A = "B", B = 2 } }; 
> var y = new List<BClass> { new BClass { A = "C", C = 3 }, new BClass { A = "D", C = 4 } }; 
> var z = (from item in x select new { A = item.A, B = item.B }).Union(from item in y select new { A = item.A, B = item.C }); 
> z 
UnionIterator { \{ A = "a", B = 1 }, \{ A = "B", B = 2 }, \{ A = "C", B = 3 }, \{ A = "D", B = 4 } } 

あなたはあなたの特定の状況にそれを適応させることができるはずです。

0

ViewModelクラスを作成し、テーブル列の表現を格納し、LinQクエリで結合を使用し、列ごとに複数行を必要とする場合にグループ化する必要があります。後でViewModelの表示情報を作成することをお勧めします。

メタデータ:

public class TablesMetadata{ 
    [Display(Name = "Field 1")] 
    public int table1Field1 { get; set; } 

    [Display(Name = "Field 2")] 
    public string table2Field1 { get; set; } 

    [Display(Name = "Field 3")] 
    public double table3Field1 { get; set; } 
} 

のViewModel:

あなたのコントローラで次に
[MetadataType(typeof(TablesMetadata))] 
public class TablesViewModel{ 
    public int table1Field1{ get; set; } 
    public string table2Field1 { get; set; } 
    public double table3Field1 { get; set; } 
} 

IQueryable<TablesViewModel> tables = (from t1 in context.table1 
             from t2 in context.table2 
             from t3 in context.table3 
             from au in context.ActualUses 
             join eu in context.EstimadedUses on au.ActualUsesKey equals eu.EstimatedUsesKey 
             where //where clause 
             select new TablesViewModel{ 
              table1Field1 = t1.table1Field1, 
              table2Field1 = t2.table2Field1, 
              table3Field1 = t3.table3Field1 
             }); 

return View(tables.ToList()); 

その後、あなたのビュータイプは、あなたのViewModelのフルネームになります

@model IEnumerable<namespace.Models.ViewModels.TablesViewModel> 
+0

これは質問に対する答えを提供しません。十分な[評判](https://stackoverflow.com/help/whats-reputation)があれば、[投稿にコメントする]ことができます(https://stackoverflow.com/help/privileges/comment)。代わりに、[質問者からの明確化を必要としない回答を提供する](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- i-do-代わりに)。 - [レビューから](/レビュー/低品質の投稿/ 16939001) –

関連する問題