gpt4 book ai didi

c# - 带有 Group By 和带有 Min(string) 的 Having 子句的 LINQ

转载 作者:行者123 更新时间:2023-11-30 14:55:43 25 4
gpt4 key购买 nike

网络上有group by的例子 - having count or select minimum date with linq 但是我找不到针对我的问题的特定解决方案。而且我还没有对 linq 的高级理解来组合我目前发现的这些解决方案。

我有一个这样的 SQL 查询:

select client_id 
from my_table /* Column1 : client_id, Column2 : _month */
group by client_id
having min(_month) = '2009-11'

我的问题是:如何将此查询转换为 c# linq?。到目前为止,我写了这样的东西,但它没有给出我必须拥有的东西:

var query = dataTable.AsEnumerable() // This is my_table
.GroupBy(c => c.Field<Int32>("client_id"))
.Select(g => new
{
g.Key,
minMonth = g.Min(c => c.Field<string>("_month"))
})
.Where(d => d.minMonth == "Some String like '2009-11'");

它实际上给了我不需要的 SQL 的结果:

select client_id, min(_month) 
from my_table
where _month = '2009-11'
group by client_id

注意:_month 是一个字符串,格式为 YYYY-MM。

最佳答案

试试这个:

var results = mytable.GroupBy(x => x.client_id)
.Where(x => x.Min(y => DateTime.ParseExact(y._month,"yyyy-MM",null))
== new DateTime(2009,11,1))
.Select(x=>x.Key);

having 子句在此 LINQ 语句中的 Where 中实现。通过client_id分组后,我们使用x.Min实现_month上的min聚合函数,然后使用ParseExact 方法解析为年月组合以进行比较。

来自SQLFiddle由OP提供,返回了4条记录。 demo使用相同的数据,上述查询也返回相同的 4 条记录。

关于c# - 带有 Group By 和带有 Min(string) 的 Having 子句的 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24857129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com