0

我需要将此 SQL 查询转换为 LINQ:

SELECT COUNT(result1.Id) AS total, 
    result1.OccurrenceDate, 
    result1.Path, 
    result1.Message, 
    result1.StackTrace 
FROM (SELECT * FROM tbllog ORDER BY OccurrenceDate DESC) AS result1
GROUP BY result1.Path, result1.Message ORDER BY total DESC

但我没有成功。我尝试了很多方法,没有任何效果。一些帮助?

4

3 回答 3

0

从以下内容创建一个 linq 查询:

SELECT * FROM tbllog ORDER BY OccurrenceDate DESC AS result1
GROUP BY result1.Path, result1.Message ORDER BY total DESC

完成后,编写一些 linq 以获取计数。

于 2012-07-02T19:15:20.560 回答
0
var results = _dbContext.tbllog
    .GroupBy( t => new { t.Path, t.Message })
    .Select( g => new 
        {
            Total = g.Count(),
            Path = g.Key.Path,
            Message = g.Key.Message
        }).OrderBy(p => p.Total);

值得一提的是,您的 sql 查询是无效的,因为属性OccurrenceDateStackTrace不在GROUP BY子句中,也不在聚合函数中,因此它是无效查询。与 LINQ 查询相同。您应该确定要对它们做什么。要么将它们包含在 group by 中,要么使用聚合函数为每个组选择适当的值。

于 2012-07-02T19:24:16.970 回答
0

我不知道您的问题的上下文是什么,但是如果您不需要修改查询以便使用其他参数执行,我强烈建议将查询作为 SQL 执行。我知道的所有 ORM(实体框架、NHiberate、LINQ to SQL 等)都支持这一点。

埃里克

于 2012-07-02T19:57:07.773 回答