当转换为linq时,这个sql查询(w count和group by)会是什么样子?

时间:2009-03-31 15:04:02

标签: linq linq-to-objects llblgenpro

转换为linq时,以下sql查询的外观如何?

SELECT
    myId, Count(myId) 
FROM MyTable 
GROUP BY myId

我尝试了以下内容:

var q = from a in db.MyTable
group a by a.Id into g
let count = g.Count()
select new
{
  Count = Id,
  Key= g.Key
};

但它在枚举时引发异常,表明没有带有名为“Key”的映射的db函数。我在这个特定的应用程序上使用LLBLGen,我怀疑这是根本问题所在。我想在开始挖掘之前验证我的linq语法是否正确。有人看错了吗?

1 个答案:

答案 0 :(得分:3)

试试这个:

var q = from a in db.MyTable
        group a by a.Id into g
        select new { Id=g.Key, Count=g.Count() };

这与你的几乎相同,但你的Count是以不同的方式获得的,这对我来说是错误的。

如果LLBLGen不理解IGrouping.Key,那可能会很棘手......

要检查您的LINQ语法是否正确,我建议您构建一个非常简单的内存列表以用作表格。这是一个例子:

using System;
using System.Collections.Generic;
using System.Linq;

class Test
{
    static void Main()
    {
        var data = new[] {
            new { Id="X", Name="Jon" },
            new { Id="Y", Name="Marc" },
            new { Id="X", Name="Holly" },
        };

        var query = from a in data
                    group a by a.Id into g
                    select new { Id=g.Key, Count=g.Count() };

        foreach (var entry in query)
        {
            Console.WriteLine(entry);
        }
    }
}

这看起来像是给了我正确的结果。