[英]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.