Как будет выглядеть этот sql-запрос (w count и group by) при переводе в linq? - PullRequest
0 голосов
/ 31 марта 2009

Как будет выглядеть следующий 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
};

но при перечислении возникает исключение, указывающее, что нет функции db с отображением с именем 'Key' Я использую LLBLGen в этом конкретном приложении, и я подозреваю, что именно здесь кроется проблема. Я хочу убедиться, что мой синтаксис linq правильный, прежде чем начать копать, хотя. Кто-нибудь видит что-то не так?

1 Ответ

3 голосов
/ 31 марта 2009

Попробуйте это:

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

Похоже, это дает мне правильные результаты.

...