Я работаю над проектом ASP.NET core w / EF о пожертвованиях, я бы создал группу списков пожертвований по основателям и упорядочил по общей сумме.
Просто запросить 2 таблицы [DonationTransaction] и [Aspnetusers] по SQL:
SELECT CONCAT(u.FirstName, " ", u.LastName) as Fullname, 'BuddyIcon.jpg' as Image, SUM(t.amount)
FROM donation_transaction t
LEFT JOIN aspnetusers u
ON u.Id = t.user_id
GROUP BY t.user_id
Заказать по сумме (в сумме) DESC
Однако, используя шаблон репо с EF, я должен выполнять запрос по лямбда-выражению.
IEnumerable < DonationTransaction > tranlist = _donationTransactionService.GetDonationTransactions();
IEnumerable < Aspnetusers > userlist = _userService.GetUsers();
IEnumerable < DonationRanking > founderlist = tranlist.Join(userlist,
t => t.UserId,
u => u.Id,
(t, u) => new {
UserID = u.Id, FullName = u.FirstName + " " + u.LastName, Image = "BuddyIcon.jpg", Amount = t.Amount
})
.GroupBy(grp => grp.UserID)
.Select(group => new DonationRanking {
Name = group.First().FullName,
Image = group.First().Image,
TotalAmount = group.Sum(ta => ta.Amount)
})
.OrderByDescending(dr => dr.TotalAmount);
У меня есть вопрос:
У меня есть предварительный просмотр результата запроса, результат кажется правильным, однако я не понимаю, почему брать член группы методом First () (например, group.First (). FullName),
основано на MSDN документ
Метод First () - возвращает первый элемент в последовательности, который удовлетворяет указанному условию.
Так значит ли это получить первый ряд только из [grp]?
Как улучшить лямбда-выражение выше?
В Visual Studio 2017 он способен визуализировать SQL, сгенерированный LINQ в режиме отладки, однако он не может проверить, используя лямбда-выражение, еще одна интересная вещь, которую я обнаружил, это то, что я включаю профилировщик SQL в MySQL. ,
SQL, сгенерированный по лямбда-выражению, не будет записываться в журнал.
Итак, как я могу просмотреть SQL как использовать LINQ2SQL?