将查询从SQL转换为LINQ

时间:2012-07-02 18:53:39

标签: c# sql linq

我需要将此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

但我没有成功。我尝试过很多方面,没有任何作用。 一些帮助?

3 个答案:

答案 0 :(得分:0)

根据以下内容创建linq查询:

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

完成后,写一些linq来获取你的计数。

答案 1 :(得分: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查询相同。您应该确定要对它们执行的操作。要么将它们包含在组中,要么使用聚合函数为每个组选择适当的值。

答案 2 :(得分:0)

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

埃里克