如何在EF ASP.NET MVC5中的lambda表达式中创建一个简单的左外连接

时间:2014-08-22 07:35:45

标签: asp.net-mvc linq entity-framework lambda

我没有运气就搜索了几个小时。我正在尝试创建一个lambda表达式来从两个表Schedule和Request中获取数据。但我在这里输出一个bool。我怎样才能做一个合适的左外连接来解决这个问题? 这是我能想到的最好的

ViewBag.RequestList = db.Requests
    .Include(r => r.Department)
    .Select(r => db.Schedules.Any(s => s.RequestId == r.RequestId));

但它不是一个列表。

假设我的表格模型如下

public class Request{
 public virtual int RequestId { get; set; }
 public virtual string Remarks { get; set; }
}

public class Schedule{
 public virtual int ScheduleId{ get; set; }
 public virtual string Name{ get; set; }
 public virtual Request Request { get; set; }
}

我正在尝试查看每个请求是否有一个或多个与之关联的计划。因此,如果我可以附加计划对象请求并将其作为列表输出,那么这就是我所需要的。 但我想用LINQ和lambda表达式来做这件事,我看过如下的查询;

var leftList = (from emp in db.Requests
                join d in db.Schedules
                on emp.RequestId equals d.RequestId into output
                from j in output.DefaultIfEmpty()
                select new { RequestId = emp.RequestId, 
                             name = emp.Department.Name, 
                             route = emp.Route.Name });

但这不是我想要的,因为我必须在new { RequestId = emp.RequestId, name = emp.Department.Name, route = emp.Route.Name }

中指定我需要的每个字段

非常感谢!

1 个答案:

答案 0 :(得分:0)

只需列出您想要的内容:

          var leftList =    from emp in db.Requests
                            join d in db.Schedules
                            on emp.RequestId equals d.RequestId into output
                            from j in output.DefaultIfEmpty()
                            select new 
                            { 
                               RequestId = emp.RequestId,
                               name = emp.Department.Name, 
                               route = emp.Route.Name,
                               ScheduleId=j==null?0:j.ScheduleId,
                               SName=j==null?""j.Name,
                            };