Здравствуйте, ShurikEv, Вы писали:
SE>Здравствуйте, ShurikEv, Вы писали:
SE>>Здравствуйте, ShurikEv, Вы писали:
SE>>>BLToolkit
SE>>>Собственно сабж.
SE>>>Надо, чтобы работало вот это https://smehrozalam.wordpress.com/2009/12/29/linq-how-to-get-the-latest-last-record-with-a-group-by-clause/
SE>>>Пытаюсь выполнить код
SE>>>SE>>>from p in PersonOrders
SE>>>//where conditions or joins with other tables to be included here
SE>>>group p by p.PersonID into grp
SE>>>select grp.OrderByDescending(g=>g.OrderDate).First()
SE>>>
SE>>>Приложение падает. Реально ли сделать то, что хочу? Или проще plain text sql писать?
SE>>Точнее падает (без кидания exception) только во втором случае. В первом же ловлю исключение:
SE>>Additional information: 'Key' is not a member of type '<>f__AnonymousType0`2[System.Linq.IGrouping`2[System.String,DataModels.customer],System.Int32]'
SE>>Попробовал linq2db, тоже самое
SE>Проверил в EF, всё работает. Блин, почему BLT не может?
SE>Похоже придётся текстом набирать запрос
Выкрутился
var tbl = customersDb.Customer
.GroupBy(c => c.PassportNumber)
.Select(groups => new {groups.Key, MaxId = groups.Max(g => g.Id)});
var res = from c in customersDb.Customer
from t in tbl
where c.Id == t.MaxId
select new {c.FirstName, c.LastName, c.PassportNumber};
var result = res.ToList();
Правда генерируется аж 3 селекта вместо 2х
SELECT
[t4].[FirstName] as [FirstName1],
[t4].[LastName] as [LastName1],
[t4].[PassportNumber] as [PassportNumber1]
FROM
(
SELECT
[t1].[customer_id] as [Id],
[t3].[c1] as [c11],
[t1].[customer_first_name] as [FirstName],
[t1].[customer_last_name] as [LastName],
[t1].[customer_passport_number] as [PassportNumber]
FROM
[customers] [t1],
(
SELECT
Max([t2].[customer_id]) as [c1]
FROM
[customers] [t2]
GROUP BY
[t2].[customer_passport_number]
) [t3]
) [t4]
WHERE
[t4].[Id] = [t4].[c11]