使用lambda表达式的共同相关查询

时间:2012-11-25 14:39:42

标签: linq lambda

如何将此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();

2 个答案:

答案 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
                                             });