2017-03-21 7 views
1

コントローラに2つのセッション、sessCashsessFuelがあります。Linq Unionを使用してMVCで2つのセッションを組み合わせることはできますか?

どちらも同じフィールドを持つ2つの異なるテーブルtblCashtblFuelの値を格納しています。

tblCash

--------------------------- 
Id | Type  | Price | 
----+------------+--------+ 
c1 | Electronic | 200 | 
c2 | Water  | 50  | 
--------------------------- 

tblFuel

-------------------- 
Id | Type | Price | 
----+------+-------+ 
f1 | Fuel | 5  | 
f2 | Fuel | 10 | 
-------------------- 

tblFuelは、将来のクエリのtblCashから分離されています。

私はindex.cshtmlで1つのビューに結合したいが、SQLクエリではunionを使わず、プロジェクトではlinq unionを使う。

どうすればいいですか?

私はこの

sessCash.OrderBy(x => x.Type).Select(x => new { x.Id, x.Type, x.Price}).Union(sessFuel(...//I'm not sure how to continue 

感謝を試してみました。

+2

最初の(キャッシュ)投影 '.Union(sessFuel.Select(f => new {Id = f.Id、Type = f.Type、Price = f.Price}))')と同じパラメーターを選択します。 – Jasen

+2

しかし、ビュー内のデータを使用する場合は、匿名オブジェクトを使用するのではなく、ビューモデルに投影することをお勧めします。 –

+0

@StephenMueckeはい、@Jasenのようなコードを使用するたびに、エラーが発生します。 '暗黙的にタイプを変換できません。 'system.collections.generic.list匿名タイプ#1' ' – JTR

答えて

1

tblCashtblFuelは、異なるタイプ(それらが同一のプロパティ名が含まれているにもかかわらず)されているので、あなたがそのビューモデル

public class MyVM 
{ 
    public int Id { get; set; } 
    public string Type { get; set; } // or enum? 
    public decimal Price { get; set; } 
} 

、その後のコレクションに問い合わせるビューモデルとプロジェクトを作成する必要がありますクエリは

var model = sessCash.OrderBy(x => x.Type).Select(x => new MyVM 
{ 
    Id = x.Id, 
    Type = x.Type, 
    Price = x.Price 
}).Union(sessFuel.OrderBy(x => x.Type).Select(x => new MyVM 
{ 
    Id = x.Id, 
    Type = x.Type, 
    Price = x.Price 
}); 
return view(model); 

とビューになり

@model IEnumerable<MyVM> 
関連する問題