2016-08-14 5 views
1

enter image description hereКак удалить повторяющиеся записи из LINQ запроса

Это как моя база данных выглядит и мой код, который получает все данные из базы данных по юркнуть

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

Но когда я хочу, чтобы показать его в View он показывает повторяющиеся Ключи (например, Ключ 1, Ключ 2, Ключ 3, Ключ 1, Ключ 2, Ключ 3 и т. д.) и Элементы (Пункт 1, Пункт 2, Пункт 1, Пункт 2 и т. д.). Как удалить дубликаты из запроса?

Это мой ViewModel

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 объект с 2 подробно WerehouseKey и Item лица, которые не имеют отношения друг к другу, таким образом, не могут быть объединены в одну запись, такую ​​как ваша текущая модель.

Единственный способ я вижу, чтобы представить такие данные, чтобы изменить модель представления на:

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

и заполнить его с помощью двух Group Join S:

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

 Смежные вопросы

  • Нет связанных вопросов^_^