我想翻译一下:
SELECT IDNum, Max(Convert(varchar(20), (TimeOut - TimeIn), 108))
FROM IO_Times Group by IDNum
order by Max(Convert(varchar(20), (TimeOut - TimeIn), 108)) desc";
进入C#中的LINQ。以上返回与每个唯一IDNum对应的(TimeOut-TimeIn)的最大值列表(每个IDNum有多个TimeOut-TimeIn值)。
以下是我现在正在尝试的内容:
from IO_Time in db.IO_Times
orderby SqlMethods.DateDiffMinute(IO_Time.TimeIn, IO_Time.TimeOut) descending
group IO_Time by IO_Time.IDNum into list
select new
{
ID = list.Key,
Time = list
});
这将以正确的顺序返回正确的ID,但“list”包含数据库条目中的所有内容(这是有意义的)。我也尝试过IDNum和Time的分组,但后来我得到了唯一的时间条目和多个ID。
我可以做一个foreach循环并手动排序,但我真的不愿意这样做。
有什么建议吗?
答案 0 :(得分:2)
from IO_Time in db.IO_Times
orderby SqlMethods.DateDiffMinute(IO_Time.TimeIn, IO_Time.TimeOut) descending
group IO_Time by IO_Time.IDNum into list
select new
{
ID = list.Key,
Time = list.Max(t => t.TimeOut - t.TimeIn)
}
因为你想更频繁地使用Lambdas:
var results =
dbo.IO_Times
.OrderByDescending(i => SqlMethods.DateDiffMinutes(i.TimeIn, i.TimeOut))
.GroupBy(i => i.IDNum)
.Select(g => new
{
ID = g.Key,
Time = g.Max(t => t.TimeOut - t.TimeIn)
});
答案 1 :(得分:1)
select new
{
ID = list.Key,
Time = list.Max(i => <operation>)
});
这就是你想要做的吗?