2016-08-14 16 views
1

enter image description hereLINQクエリから重複レコードを削除する方法

これは私のデータベースがどのように見えるとWhID

public ActionResult Details(int? id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     var viewModel = 
      (from Wh in db.Werehouses 
      join WhK in db.WerehouseKeys on Wh.WhID equals WhK.WhID 
      join Itm in db.Items on Wh.WhID equals Itm.WhID 
      where Wh.WhID == id 
      select new WerehouseViewModel { Werehouse = Wh, WerehouseKey = WhK, Item = Itm }); 
     if (viewModel == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(viewModel); 
    } 

することにより、データベースからすべてのデータを取得する私のコードしかし、どのようにされ、私はビューでそれを表示したいときキー1、キー2、キー3、キー1、キー2、キー3など)とアイテム(アイテム1、アイテム2、アイテム1、アイテム2など)が重複して表示されます。クエリから重複を削除するにはどうすればよいですか?

これは、このように、私はあなたがそれを視覚化しようとしているか見当がつかないが、あなたがお互いに関係のない2詳細WerehouseKeyItemエンティティと一つのマスターWerehouse実体を持っている私のViewModel

public class WerehouseViewModel 
{ 
    public Werehouse Werehouse { get; set; } 
    public WerehouseKey WerehouseKey { get; set; } 
    public Item Item { get; set; } 
} 
+0

を(1つ)〜2つの異なる(多くの)実体を含むので、結果は関連する「WerehouseKeys」と「Items」レコードのデカルト積である。ビューモデルの変更とグループ結合の使用を検討する必要があります。 –

+0

アドバイスをいただき、ありがとうございました。あなたはそれをどのように編集してもらえますか? – Cezar

+0

私は 'WerehouseViewModel'を次のようにします。' public Werehouse Werehouse {get;セット; }公開リスト WerehouseKeys {get;セット; } public List アイテム{get;セット; } ' –

答えて

0

です現在のビューモデルのように単一のレコードに結合することはできません。

私は、このようなデータを表現するために見る唯一の方法は、にビューモデルを変更することです:

public class WerehouseViewModel 
{ 
    public Werehouse Werehouse { get; set; } 
    public List<WerehouseKey> WerehouseKeys { get; set; } 
    public List<Item> Items { get; set; } 
} 

と2つのGroup Joinの使用を移入:さて、あなたは `Werehouses`に参加している

var viewModel = 
    (from Wh in db.Werehouses 
    join WhK in db.WerehouseKeys on Wh.WhID equals WhK.WhID into keys 
    join Itm in db.Items on Wh.WhID equals Itm.WhID into items 
    where Wh.WhID == id 
    select new WerehouseViewModel 
    { 
     Werehouse = Wh, 
     WerehouseKeys = keys.ToList(), 
     Items = items.ToList() 
    }) 
    .FirstOrDefault(); 
+0

それは私の質問に対する答えです。どうもありがとうございます! – Cezar

関連する問題