Linq Получить последнюю запись для набора значений по последней введенной дате - PullRequest
0 голосов
/ 28 августа 2018

У меня проблема с выяснением того, как отфильтровать набор значений из моей таблицы базы данных по последней введенной дате

пока у меня есть следующий оператор linq

List<int> vals = new List<int>{1, 2, 3, 4, 5};

Context.Table.Where(x => x.Col1 == col1 && vals.Contains(x.Col2)).OrderByDescending(x => x.DateEntered).Distinct().ToList();

Кажется, что возвращаются все строки? Так в основном для каждого vals элементов, например 1,2,3,4 должен вернуть один ряд.

Есть предложения, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Вам нужно сгруппировать по Col2 в значениях, чтобы вы могли выбрать самую последнюю из каждой группы. Использование синтаксиса LINQ Lambda:

List<int> vals = new List<int>{1, 2, 3, 4, 5};

var ans = Context.Table.Where(x => x.Col1 == Col1 && vals.Contains(x.Col2))
                       .GroupBy(x => x.Col2)
                       .Select(xg => xg.OrderByDescending(x => x.DateEntered).First())
                       .ToList();
0 голосов
/ 28 августа 2018

Если вам нужна последняя версия для каждой записи, вы можете использовать GroupBy с Select:

Context.Table
    .Where(x => x.Col1 == col1 && vals.Contains(x.Col2))
    .GroupBy(x => x.Col2)
    // order by descending on the group
    // and then take the first
    .Select(grp => grp.OrderByDescending(x => x.DateEntered).First())
    .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...