请求将含子查询的指定SQL语句转换为LINQ语句
对应SQL的LINQ查询实现
原SQL的逻辑是:查询Project表的ProjectId、CompanyId、Status字段,同时判断当前项目是否存在Level > 1的关联子项目(通过MasterProjectId匹配),存在则HasSubProjects取1,否则取0。
以下是两种等价的LINQ实现方式:
查询语法
var query = from a in dbContext.Projects select new { a.ProjectId, a.CompanyId, a.Status, HasSubProjects = dbContext.Projects .Any(b => b.MasterProjectId == a.MasterProjectId && b.Level > 1) ? 1 : 0 };
方法语法
var query = dbContext.Projects .Select(a => new { a.ProjectId, a.CompanyId, a.Status, HasSubProjects = dbContext.Projects .Any(b => b.MasterProjectId == a.MasterProjectId && b.Level > 1) ? 1 : 0 });
说明
- 用
Any()方法替代原SQL的SELECT TOP 1 1,因为Any()会检查是否存在符合条件的记录,逻辑和原SQL完全一致,且生成的SQL执行效率相近。 - 结果会返回一个匿名类型集合,包含原SQL指定的所有字段。
内容的提问来源于stack exchange,提问作者carlosm
相关产品推荐
相关产品推荐

