如何将此LINQ查询从查询语法转换为方法语法?我正在执行一个与协同相关的查询操作。
var query = (from r in objEntities.Employee
where r.Location == (from q in objEntities.Department
where q.Location == r.Location
select q.Location).FirstOrDefault()
select new
{
FirstName = r.FirstName,
LastName = r.LastName,
Age = r.Age,
Location = r.Location
});
GridView1.DataSource = query;
GridView1.DataBind();
答案 0 :(得分:1)
我认为您正在尝试将查询转换为基于方法的查询,而不是基于语法的查询。
var query = objEntities.Employee
.Where(e => e.Location == objEntities.Department
.Where(d => d.Location == r.Location)
.Select(d => d.Location)
.FirstOrDefault())
.Select(e => new {
FirstName = e.FirstName,
LastName = e.LastName,
Age = e.Age,
Location = e.Location
});
我也非常确定where
子句中的内在表达式可以替换为类似的内容:
.Where(e => objEntities.Department.Any(d => d.Location == e.Location)
答案 1 :(得分:0)
嵌套查询总是存在性能问题,您应该使用join:
在lambda表达式中查询应该是
var query = objEntities.Employee.Join(objEntities.Department, E => E.Location,
D => D.Location,
(E,D) => new {
FirstName = E.FirstName,
LastName = E.LastName,
Age = E.Age,
Location = E.Location
});