LINQ查询查找一列的最小值

时间:2011-01-07 17:10:35

标签: sql linq min

我有一个包含以下列的表

inspection_dt,
contact_dt,
description,
product_mod,
product_desc,
contact_nm,
history_id,
inspect_id,
history_type,
incident_product_id,
contact_history_id

我会使用LINQ来查询此表中的通用行列表。扭曲是我想要history_id的最小(MIN)值 - 并模仿这个SQL查询。

SELECT DISTINCT
    inspection_dt,
    contact_dt,
    description,
    product_mod,
    product_desc,
    contact_nm,
    MIN(history_id) AS history_id,
    inspect_id,
    history_type,
    incident_product_id,
    contact_history_id
FROM
    myTable
GROUP BY
    inspection_dt,
    contact_dt,
    description,
    product_mod,
    product_desc,
    contact_nm,
    inspect_id,
    history_type,
    incident_product_id,
    contact_history_id

我尝试过像

这样的片段
var searchData = items
    .GroupBy(i => new { i.history_id })
    .Select(g => new { history = g.Min() })
    .Distinct();

但仍然搞砸了

我在使用MIN,MAX等函数时陷入困境,并在LINQ中进行分组,并感谢我能得到的任何帮助。

谢谢,

2 个答案:

答案 0 :(得分:3)

如果要完全模仿查询,则需要按照SQL中分组的相同列或字段进行分组。尝试像

这样的东西
.GroupBy(item => 
      new 
      {
          item.inspection_dt,
          item.contact_dt,
          item.description,
          item.product_mod,
          item.product_desc,
          item.contact_nm,
          item.inspect_id,
          item.history_type,
          item.incident_product_id
      }
     )
.Select(g => g.Min(item => item.history_id))

答案 1 :(得分:1)

您可以尝试以下代码。

我注意到当我在探查器中查看它时会生成一个SQL交叉连接,但我认为它可以实现您想要的功能,并且您可以对其进行更多调整。

var searchData = items.Select(x => new {x.inspection_dt,x.contact_dt, history= items.Min(j => j.history_id)}).Distinct();

希望这有帮助