如何从 LINQ 查询中删除重复记录

How to remove duplicate records from LINQ query

这是我的数据库的样子和我的代码,它通过 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; }
}

我不知道你打算如何可视化它,但你有一个主 Werehouse 实体和 2 个细节 WerehouseKeyItem 实体,它们彼此无关,因此不能像您当前的视图模型那样组合在单个记录中。

我认为表示此类数据的唯一方法是将视图模型更改为:

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