Linq сгруппировать с подзапросом - PullRequest
0 голосов
/ 10 июня 2009

У меня есть объект, который содержит эти три свойства: ID, DATE и NAME, и хочу запросить его с помощью linq, дающего те же результаты, как если бы оно было записано в приведенном ниже выражении sql.

SELECT ID, MAX(DATE), NAME 
FROM TABLE
GROUP BY ID

Вот что у меня есть с linq:

var grouped = from a in table
group a by a.ID into g
select new fooObject()
{
DATE= g.Max(a => a.DATE),
NAME= g.Select(a => a.Name).ToString(),
ID= g.Select(a => a.ID)
};

Заранее спасибо за любую помощь.

Ответы [ 3 ]

4 голосов
/ 10 июня 2009

Учитывая ваше обновленное объяснение, вот мое предлагаемое решение. Я также немного почистил код.

var grouped = from item in table
              group item by item.Id into g
              let itemMaxDate = g.MaxBy(i => i.Date)
              select new FooObject()
              {
                  Id = g.Key,
                  Name = itemMaxDate.Name,
                  Date = itemMaxDate.Date
              };

Затем необходимо определить метод расширения MaxBy. (К сожалению, в LINQ есть один встроенный.)

public static TSource MaxBy<TSource, TResult>(this IEnumerable<TSource> 
    collection, Func<TSource, TResult> func)
{
    var comparer = Comparer<TResult>.Default;
    TSource maxItem = null;
    foreach (var item in collection)
    {
        if (comparer.Compare(item, maxItem) > 0)
            maxItem = item;
    }
    return maxItem;
}

Я считаю, что это должно быть то, что вы хотите сейчас. Дайте мне знать, если он сделает эту работу за вас.

2 голосов
/ 10 июня 2009
var grouped = (from a in table
               where a.Date == (from d in table where a.ID == d.ID select Date).Max()
               select a).OrderBy(i => i.ID);
1 голос
/ 10 июня 2009
SELECT ID, MAX(DATE), NAME
FROM TABLE
GROUP BY ID

Столбец TABLE.NAME недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...