我正在尝试将此SQL查询转换为LINQ:
SELECT
T1.FileID,
MAX(T1.Date) AS MaxDate
FROM
T1
JOIN
T2 ON T1.Code = T2.Code
WHERE
T2.Category = 'C100'
GROUP BY
T1.FileID
HAVING
T1.FileID LIKE 'F01%'
我使用以下方法获取所有日期而不是每个FileID的每个日期的最大值:
var query =
from f in db.T1
join c in db.T2 on f.Code equals c.Code
group f by new { f.FileID, f.Date, c.Category } into g
where g.Key.FileID.StartsWith("F01") && g.Key.Category.Equals("C100")
select new
{
g.Key.FileID,
MaxDate = g.Max(d=>d.Date)
}
这似乎比需要的更复杂。我该如何解决这个问题?
答案 0 :(得分:3)
为什么SQL只包含GROUP BY
子句中的一列,而LINQ查询却包含三列?
您还应该在LINQ查询中where
之前移动group by
语句。
var query =
from f in db.T1
join c in db.T2 on f.Code = c.Code
where c.Category = "C100"
group f by f.FileID into g
where SqlMethods.Like(g.Key, "F01%")
select new
{
FileID = g.Key,
MaxDate = g.Max(d => d.Date)
}
答案 1 :(得分:2)
用这个修改你的linq:
在编写linq查询时,您需要记住定义格式的顺序
var query = ( from f in db.T1
join c in db.T2 on f.Code = c.Code
where c.Category = "C100"
group f by f.FileID into g
select new
{
FileID = g.Key,
MaxDate = g.Max(d=>d.Date)
});