0

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

ただし、「キー」という名前のマッピングを持つ 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 に答える