2013-03-07 133 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()方法給你一個左連接。 您可能想要更詳細地瞭解選擇列表(命名列而不是'*')。