Sql server 2008 EF-生成的一对多选择查询中的问题

Sql server 2008 EF-生成的一对多选择查询中的问题,sql-server-2008,entity-framework-4,Sql Server 2008,Entity Framework 4,我是EF新手,所以请容忍我:哦 我在我的DB里有一种非常直接的关系。ts_Order表{ID,OrderDate,OrderNumber}和ts_OrderDetails表{ID,ProductId,OrderID}。两个表中的ID都是PK和Identity列。ts_OrderDetails表中的OrderID为FK,引用ts_Order表的ID列 我需要选择所有订单以及每个订单可能有的每个细节。在SQL中,我将编写如下内容: select * from ts_Order ORD inner j

我是EF新手,所以请容忍我:哦

我在我的DB里有一种非常直接的关系。ts_Order表{ID,OrderDate,OrderNumber}和ts_OrderDetails表{ID,ProductId,OrderID}。两个表中的ID都是PK和Identity列。ts_OrderDetails表中的OrderID为FK,引用ts_Order表的ID列

我需要选择所有订单以及每个订单可能有的每个细节。在SQL中,我将编写如下内容:

select * from ts_Order ORD inner join ts_OrderDetails DTL on ORD.ID=DTL.OrderID
这很好用

当我尝试在EF中执行类似操作时:

List<Order> result = context.Orders.Include("OrderDetails").Where(i => i.ID > 0).ToList();
为什么生成的查询如此复杂?我错过什么了吗


-Vinod基于我所看到的EF生成的一些东西,实际上还不错。你没有做错什么

如果您想获得更多关于EF用于生成结果的过程的信息,这是一个很好的阅读方法。这也是使EF尽可能发挥性能的良好指南


Linq2Sql如何处理这样的查询,更好/更糟?我从未使用过LinqtoSQL。也许我应该试试!我会让你知道结果的。你需要在Linq2Sql中使用
SELECT 
[Project1].[ID] AS [ID], 
[Project1].[OrderDate] AS [OrderDate], 
[Project1].[OrderNumber] AS [OrderNumber], 
[Project1].[C1] AS [C1], 
[Project1].[ID1] AS [ID1], 
[Project1].[Product] AS [Product], 
[Project1].[OrderID] AS [OrderID]
FROM ( SELECT 
    [Extent1].[ID] AS [ID], 
    [Extent1].[OrderDate] AS [OrderDate], 
    [Extent1].[OrderNumber] AS [OrderNumber], 
    [Extent2].[ID] AS [ID1], 
    [Extent2].[Product] AS [Product], 
    [Extent2].[OrderID] AS [OrderID], 
    CASE WHEN ([Extent2].[ID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]
    FROM  [dbo].[ts_Order] AS [Extent1]
    LEFT OUTER JOIN (SELECT 
      [ts_OrderDetails].[ID] AS [ID], 
      [ts_OrderDetails].[Product] AS [Product], 
      [ts_OrderDetails].[OrderID] AS [OrderID]
      FROM [dbo].[ts_OrderDetails] AS [ts_OrderDetails]) AS [Extent2] ON [Extent1].[ID] = [Extent2].[OrderID]
    WHERE [Extent1].[ID] > 0
)  AS [Project1]
ORDER BY [Project1].[ID] ASC, [Project1].[C1] ASC