我正在嘗試選擇用戶每年擁有的“最高”許可證。
我開始:
var lic = _context.Licences
.Where(l => l.MemberNumber == memberNumber)
.GroupBy(l => new { l.LicenceYear }
(key, g) => g.OrderByDescending(l => l.ProfessionalTitleId)
.First());
它有效。
但是,它總是回傳我不想要的許可證中的所有列。此外,我想選擇一些子屬性,例如l.Title.TitleNumber,但無論我將.Select(l => new {l.LicenceNumber, l.Title.TitleNumber})生成的 sql 查詢放在哪里,都會從許可證中選擇所有列,并且只從許可證中選擇。
我也試過
var lic = _context.Licences
.Where(l => l.MemberNumber == User.GetMemberNumber())
.GroupBy(l => new { l.LicenceYear },
l => new { l.Title.TitleNumber, l.LicenceYear, l.LicenceNumber, l.Title.ProfessionalTitleId },
(key, g) => g.OrderByDescending(l => l.ProfessionalTitleId)
.First());
有趣的是,它使用ProfessionalTitleIdfrom正確創建了 ROW_NUMBER(),Title但仍然從許可證中選擇所有列。
那么,如何修改查詢以僅選擇某些列?
uj5u.com熱心網友回復:
此功能是 EF Core 6 的新功能,我看到了它的實作——它們只是克隆決議背景關系,并且可能包含所有欄位。如果您在 GitHub 中創建問題,他們可能會在以后改進投影。
無論如何,有一種解決方法可以在不分組的情況下模擬相同的查詢:
var filtered = _context.Licences.Where(l => l.MemberNumber == memberNumber);
var lic =
from d in filtered.Select(l => new { l.LicenceYear }).Distinct()
from l in filtered.Where(l => l.LicenceYear == d.LicenceYear)
.OrderByDescending(l => l.ProfessionalTitleId)
.Take(1)
select new
{
l.Title.TitleNumber,
l.LicenceYear,
l.LicenceNumber,
l.Title.ProfessionalTitleId
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/411338.html
標籤:
