只是想知道如何用 LINQ 语法编写以下 SQL
select U.Id, U.FirstName, U.Surname,
(select COUNT(COESNo) from COESDetails where InspectorId = U.Id) as Count
from UserDetails U
where U.AppearOnReport = 1
流利或查询表达式,或两者
谢谢
from u in db.UserDetails
join c in db.COESDetails on u.Id equals c.InspectorId into uc
where u.AppearOnReport == 1
select new {
u.Id,
u.FirstName,
u.Surname,
Count = uc.Count()
}
流畅的语法是
db.UserDetails.Where(ud => ud.AppearOnReport).Select(ud =>
new {
ud.Id,
ud.FirstName,
ud.Surname,
Count = db.COESDetails.Count(c => c.InspectorId == ud.Id)
});
我直接在这里写,没有打开 C# 编译器,但它应该可以工作:
using(var context = new DataContext())
{
var query = from detail in context.UserDetails
where detail.AppearOnReport = 1
select new
{
Id = detail.Id,
FirstName = detail.FirstName,
Surname = detail.Surname,
Count = context.COESDetails.Count(li => li.InspectorId = detail.Id)
};
}
此查询的问题是从 UserDetails 表中获取所有列(或者我认为是这样)。我记得您可以以某种方式指定仅获取某些列,而不是实体中的所有映射列。
无论如何,您可以使用 SQL Profiler 检查我的查询。如果你想玩更多的链接有一个工具: LINQPad。
干杯!