2017-04-10 51 views
1

我很难将这个sql查询转换为linq查询。我试图选择所有的订单,并附上该订单的订单详情。在SQL中,查询是正确的。当我用linq编写它时,一切都变得不合时宜。这里是我的代码:正确的sql到linq查询

   var result = from order in orders 
         join orderDetail in orderDetails 
         on order.OrderID equals orderDetail.OrderID 

         select new OrderVm 
         { 
          OrderId = order.OrderID, 
          OrderDetails = order.Order_Details.Select(x => 
          new OrderDetailVm 
          { 
           OrderId = orderDetail.OrderID, 
           UnitPrice = orderDetail.UnitPrice, 
           Quantity = orderDetail.Quantity, 
           ProductId = orderDetail.ProductID 

          }) 
         }; 

      return result.ToList(); 

产生这一结果enter image description here

但是在SQL如果我写

select 
o.OrderID, 
o.CustomerID, 
od.UnitPrice, 
od.Quantity, 
od.productid, 
p.ProductName 
from Orders o 
inner join [Order Details] od 
    on o.OrderID = od.OrderID 
inner join Products p 
    on p.ProductID = od.ProductID 
where o.OrderID = 10248 

我有望走出来的是enter image description here

+0

你能分别提供两个表的数据吗? –

回答

0

它看起来像从方式您在联接已经存在的嵌套对象中使用Order_Details,并且您使用的联接是多余的。

var result = from order in orders 
        select new OrderVm 
        { 
         OrderId = order.OrderID, 
         OrderDetails = order.Order_Details.Select(x => 
         new OrderDetailVm 
         { 
          OrderId = x.OrderID, 
          UnitPrice = x.UnitPrice, 
          Quantity = x.Quantity, 
          ProductId = x.ProductID 
         }) 
        }; 
+0

我添加了sql,只是为了减少结果集 –

+0

@TroyBryant好吧,如果没有必要,你可以将它撕掉。这是回答这个问题还是你在寻找更多细节? – Jerm86

+0

抱歉不完全是我在找什么。每个订单都有订单详细信息,应该是一个对象数组。 –