如何在 Entity Framework linq 中使用多个 groupby 语句?
Posted
技术标签:
【中文标题】如何在 Entity Framework linq 中使用多个 groupby 语句?【英文标题】:How to use multiple groupby statements in Entity Framework linq? 【发布时间】:2020-11-26 06:31:54 【问题描述】:我有一个包含这些列的表格:
POS
CropName
productionQty
我必须找到包含更多作物的POS
。
我试过了
from r in await _crops.GetAll()
group r by r.CropName
into g
select new
id = g.Key,
sum = g.Sum(r => r.productionQty),
name = g.First().PosName,
cropname = g.First().CropName,
;
我已经获得了所有的作物数量,但我需要根据包含更高数量的 POS 进行作物。
Example:
PosName productionQty CropName
POS1 100 Crop1
POS2 200 crop2
Pos1 300 crop1
pos1 200 crop2
我想要以下结果:
PosName productionQty CropName
POS1 400 Crop1
POS2 200 crop2
pos1 200 crop2
【问题讨论】:
higher quantity
这是什么意思?你的意思是你想排序?
你能提供示例数据吗?
看看问题。我已经编辑了问题
示例结果只显示了由PosName, CropName
对与求和productionQty
分组的示例数据,这是您要找的吗?如果是,只需查看按复合键分组的 LINQ 文档/示例。
我们不理解您的要求,因为“更高”是一个比较的词,例如您可以说“这台电视的价格比那台电视高”。你不能说“这五台电视机的价格分别是 100、200、300、400、500,哪个更高?”因为 200 比 100 高,300 比 200 和 100 高。有太多的数字比另一个数字“高”。 “最高”的价格是 500,只有一个价格最高,但“更高”需要一些东西来比较才有意义,比如“有多少电视的价格‘高于’250?”
【参考方案1】:
刚刚离开你的“期望结果”,看起来你可能想换行:
group r by r.CropName
到
group r by r.CropName.ToLower() +'\n' + r.PosName.ToLower()
这意味着大小写将被忽略,并且有两行具有 pos1/crop1 的结果将被合并,但 pos1/crop2 和 pos2/crop2 的其他行将是分开的
您应该记住,它可能不会产生您想要的结果,因为您获得的 PosName 和 CropName 将取决于结果组列表中最先出现的元素。这些东西是不区分大小写的,所以 pos1, POS1, PoS1
分组列表和 first()'d 将返回 pos1,但列表 POS1, pos1, PoS1
将返回 POS1
【讨论】:
以上是关于如何在 Entity Framework linq 中使用多个 groupby 语句?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Sql 查询转换为 Linq 及其在 Entity Framework Core 中的 Join() 方法的等价物
linq to sql、Entity Framework 和 NHibernate 的性能如何?
在 Entity Framework Core 中,如何使用数据库级别的条件(不是本地 LINQ)查询连接表上的数据?
请问在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句?
使用 Entity Framework Core 在 LINQ 查询中将字符串转换为 DateTime
在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句