2013-03-07 62 views
0
select * 
From Item i inner join Order o on i.OrderId = o.Id 
     left join OrderDealersByDistance d on o.Id = d.OrderId 
     left join SubOrder s on i.SubOrderId = s.Id 
where d.[Status] = 1 

我想用实体框架编写上面的查询。我更喜欢DataContext和扩展方法。我如何编写上面的查询?使用扩展方法创建左和内连接查询linq

+0

你应该更具体。你不能定义整个问题,并期望一个完整的答案。你需要先尝试一些东西,如果失败了,然后问一个关于如何解决它的问题。没有人知道你对linq的知识水平,所以没人能帮助你。 – jurgenreza 2013-03-07 16:38:25

+0

你没有显示很多努力来解决这个问题。重做你的问题来展示一些努力,你会得到更多更好的回应。 – 2013-03-07 16:39:29

回答

0

首先,我会使用查询语法,因为它更具可读性。

这将是这个样子

var db = new MyDbContext(conStr); 

var query = from i in db.Items 
    from o in db.Orders.Where(o => o.Id == i.OrderId) 
    from d in db.OrderDealersByDistance.Where(d => d.OrderId == o.Id).DefaultIfEmpty() 
    from s in db.SubOrders.Where(s => i.SubOrderId == s.Id).DefaultIfEmpty() 
    where d.Status == 1 
    select new { Item = i, Order = o, c.ContractName, Distance = d, SubOrder = s }; 

var result = query.ToList(); 

DefaultIfEmpty()方法给你一个左连接。 您可能想要更详细地了解选择列表(命名列而不是'*')。