0

将以下 sql 查询翻译为 linq 时的外观如何?

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 语法是否正确。有人看出有什么不对吗?

4

1 回答 1

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);
        }
    }
}

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

于 2009-03-31T15:07:05.713 回答