2012-12-18 186 views
0

我想重現一個SQL查詢使用LINQ to Entities查詢。以下SQL工作正常,我只是看不到如何在LINQ中執行它。我今天試了幾個小時,但我只是想念一些東西。Linq查詢加入子查詢

SELECT 
    h.ReqID, 
    rs.RoutingSection 
FROM ReqHeader h 
JOIN ReqRoutings  rr ON rr.ReqRoutingID = (SELECT TOP 1 r1.ReqRoutingID 
               FROM ReqRoutings r1 
               WHERE r1.ReqID = h.ReqID 
               ORDER BY r1.ReqRoutingID desc) 
JOIN ReqRoutingSections rs ON rs.RoutingSectionID = rr.RoutingSectionID 

編輯***

我可以尋找其他的例子包括一個後得到這個工作由三木提供了她。下面是對我的作品的代碼:

首先,我創建了一個名爲路線查詢持有我需要加入到

var route = (from rr in context.ReqRoutings 
        where rr.ReqID == id 
        orderby rr.ID descending 
        select rr).Take(1); 

上面記錄着當時我能夠加入到我的申請表和ReqRoutings查找表

var header = (from h in context.ReqHeaders 
       join r in route on h.ID equals r.ReqID 
       join rs in context.ReqRoutingSections on r.RoutingSectionID equals rs.ID 
       where h.ID == id 

       select {ReqID = h.ID, 
         RoutingSection = rs.RoutingSection} 

回答

1

我使用Northwnd示例數據庫 客戶,訂單,僱員表 這裏我得到最高的1階羣的客戶和訂單的僱員 請讓我知道如果這與你的要求相匹配或不

var ord = from o in NDC.Orders 
      orderby o.OrderID descending 
      group o by o.CustomerID into g      
      select new {CustomerID=g.Key,Order=g.OrderByDescending(s=>s.OrderID).First() }; 

var res1 = from o in ord 
      join emp in NDC.Employees 
      on o.Order.EmployeeID equals emp.EmployeeID into oemp 
      select new {Order=o.Order,employee=oemp }; 

Response.Write(res1.ToList().Count); 
foreach (var order in res1) 
{ 
    Response.Write(order.Order.CustomerID + "," + 
        order.Order.OrderID + ","+ 
        order.Order.EmployeeID+"<br/>"); 
} 

//上面的代碼是工作。我曾嘗試向您查詢轉換爲LINQ和與「NDC」

var ord = from rr in NDC.ReqRoutings 
      orderby rr.ReqRoutingID descending 
      group rr by rr.ReqID into g 
      select new 
      { 
       ReqID = g.Key, 
       ReqRoutings = g.OrderByDescending(s => s.ReqRoutingID).First() 
      }; 

var res1 = from o in ord 
      join emp in NDC.ReqRoutingSections on o.ReqRoutings.RoutingSectionID 
      equals emp.RoutingSectionID into oemp 
      select new { ReqRoutings = o.ReqRoutings, employee = oemp }; 

Response.Write(res1.ToList().Count); 
foreach (var order in res1) 
{ 
    Response.Write(order.ReqRoutings.ReqID + "," + 
        order.ReqRoutings.ReqRoutingID + "," + 
        order.ReqRoutings.RoutingSectionID + "<br/>"); 
} 

請讓你的更換名稱的DataContext知道它是否對你有所幫助