2012-11-25 58 views
0

如何将此LINQ查询从查询​​语法转换为方法语法?我正在执行一个相关的查询操作。使用lambda表达式的联合查询

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

你是什么意思“转换为lambda表达式”? – usr

+0

@usr他想知道如何将查询从查询​​语法转换为方法语法。 –

回答

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) 
0

嵌套查询总是有性能问题,而不是你应该使用加入:

在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 
              });