2016-08-14 4 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 등)을 보여줍니다. 검색어에서 중복 된 항목을 삭제하려면 어떻게해야합니까? 따라서,

은 당신이 그것을 시각화하려고 아무 생각이 어떻게

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

글쎄, 당신은'Werehouses'에 합류 (하나) ~ 2 개의 다른 (많은) 엔티티가 있으므로, 결과는 관련된'WerehouseKeys'와'Items' 레코드의 데카르트 곱입니다. 뷰 모델 변경 및 그룹 조인 사용을 고려해야 할 수도 있습니다. –

+0

글쎄, 조언을 주셔서 감사합니다, 제발 당신이 어떻게 편집 해 주시겠습니까? – Cezar

+0

'WerehouseViewModel'을 다음과 같이 만들 것입니다.'public Werehouse Werehouse {get; 세트; } public List WerehouseKeys {get; 세트; } public List 항목 {get; 세트; }' –

답변

0

내 뷰 모델,하지만 당신은 하나 개의 마스터 Werehouse 엔티티 세부 WerehouseKey 2와 서로 관련이없는 Item 실체가 현재보기 모델과 같은 단일 레코드에서 결합 될 수 없습니다.

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

하고 두 Group Join의 사용 채울 :

나는 이러한 데이터를 표현하기 위해 볼 수있는 유일한 방법은에 뷰 모델을 변경하는 것입니다

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