【问题标题】:Need to group LINQ to Entities Results需要对 LINQ to Entity 结果进行分组
【发布时间】:2013-09-11 15:50:50
【问题描述】:

这是我的代码:

var context = new InventoryContext();

var res = from i in context.Inventories
          select new FullInventory
          {
              InventoryID = i.InventoryID,
              ItemModelID = i.ItemModelID,
              ModelName = i.ItemModel.ModelName,
              ...
              Quantity = context.Inventories.Select(x => x.ItemModelID).Count()
          };

return res.ToList();

我的代码运行良好,但结果如下所示:

   CATEGORY   | MANUFACTURER | MODEL | QUANTITY
1. Hard drive | Dell         | 250GB | 2
2. Hard drive | Dell         | 250GB | 2

如您所见,我在表中有 2 个条目,由于这些条目完全相同,我希望将它们组合在一起。要将它们分组在一起,我需要按 ItemModelID 分组,但我仍然需要将所有数据放入 FullInventory 类列表中。

如何将我的数据组合在一起,同时仍将数据“选择”到FullInventory 类列表中?

【问题讨论】:

  • 当您说“分组”在一起时,您的意思是您希望结果集中只有 1 个对象,用于 250GB 戴尔硬盘,数量为 4?
  • KOTJMF:是的,没错。

标签: c# linq entity-framework


【解决方案1】:

按该值分组,然后使用 let 从每个组中选择第一项。

var res = from inventory in context.Inventories
          group inventory by inventory.ItemModelID into model
          let i = model.FirstOrDefault()
          select [...]

【讨论】:

  • 这个代码不起作用。逐行分组有问题,但我会看看我能尝试找出什么。
  • @acbarberi “它不起作用。”没有帮助。它是否无法编译,是否抛出异常,输出是否与预期不同,如果是,如何。如果需要帮助,您需要提供详细信息。
  • 好吧,代码是错误的,不,它不会编译。它在 Visual Studio 中以红色下划线显示。不过没关系,因为我修好了。
  • @acbarberi 再次,详细信息。什么没有编译,错误是什么,它在哪一行等等。如果你修复了它,你修复了什么?
  • var res2 = from inventory in context.Inventories 按inventory.ItemModelID 将库存分组到model let i = model.FirstOrDefault() select new FullInventory
【解决方案2】:

我会在使用 Lambda 表达式检索完整列表后尝试 Group By:

 var context = new InventoryContext();

 return (from i in context.Inventories
         select new FullInventory
         {
             InventoryID = i.InventoryID,
             ItemModelID = i.ItemModelID,
             ModelName = i.ItemModel.ModelName,
             ...
             Quantity = context.Inventories.Select(x => x.ItemModelID).Count()
         }).GroupBy(g => g.ItemModelID).ToList();

【讨论】:

  • 谢谢,但这会返回一个 IGroupable,我需要一个 IEnumerable
  • 即使它是一个 IGroupable,返回的结果集是你所期望的吗?
【解决方案3】:

您可以使用Distinct()

return res.Distinct().ToList()

【讨论】:

  • 这没有帮助。我得到了和以前一样的结果。
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多