簡體   English   中英

在LINQ查詢期間獲取行中的最小值

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

結果如下:
linqqueryimage

但是,我想只獲得以下三列的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM