0

LINQ to Entities クエリを使用して SQL クエリを再現しようとしています。次の SQL は問題なく動作しますが、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  

編集***

ミキから提供されたものを含む他の例を見た後、これを機能させることができました。これが私のために働くコードです:

最初に、参加する必要のある最上位のレコードを保持する route というクエリを作成しました

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

その後、requisitions テーブルと 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}
4

1 に答える 1

1

NorthwndサンプルデータベースCustomers、Orders、Employeesテーブルを使用していますここでは、顧客と注文の従業員IDごとに上位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/>");
}

それがあなたを助けるかどうかを知らせてください

于 2012-12-18T10:52:35.883 に答える