[英]Get min value in row during LINQ query
我知道我可以使用.Min()从列中获取最小值,但是如何连续获得最小值?
我有以下LINQ查询(用于测试目的):
from p in Pravidloes
where p.DulezitostId == 3
where p.ZpozdeniId == 1 || p.ZpozdeniId == 2
where p.SpolehlivostId == 2 || p.SpolehlivostId == 3
group p by p.VysledekId into g
select new {
result = g.Key,
value = g
}
但是,我想只获得以下三列的MIN值 :
DulezitostId,ZpozdeniId,SpolehlivostId作为值:
select new {
result = g.Key,
value = g // <-- here
}
最终结果应如下所示:
结果:2,值:1
结果:3,价值:2
我一直在寻找类似的问题,并搜索了几个关于分组和聚合查询的例子,但没有发现任何会让我前进的问题。
顺便说一句:解决方案不仅限于linq,如果您知道更好的方法。
您可以创建值的数组并对其执行Min。
select new {
result = g.Key,
value = g.SelectMany(x => new int[] { x.DulezitostId, x.ZpozdeniId, x.SpolehlivostId }).Min()
}
这将返回该分组的所有行的每个分组中的3个值的最小值。
哪会导致这样的......
结果:3,值:1
以下将为分组中的每一行选择最小值...
select new {
result = g.Key,
value = g.Select(x => new int[] { x.DulezitostId, x.ZpozdeniId, x.SpolehlivostId }.Min())
}
哪会导致这样的......
结果:3,值:1,2
如果您使用直接LINQ,最好的解决方案是Chad的答案 。 但是,如果您使用Linq To SQL,它将无法工作,因为您无法构建类似的数组。
不幸的是,我相信在Linq To Sql中执行此操作的唯一方法是重复使用Math.Min:
select new {
result = g.Key,
value = Math.Min(Math.Min(DulezitostId, ZpozdeniId), SpolehlivostId)
}
这将生成一些丑陋的CASE WHEN ...
语句,但它有效。
这样做的主要优点是,您只需从SQL返回所需的数据(而不是返回所有3列并在应用程序中执行Min
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.