2011-08-15 39 views
0

让我们用这个查询为例(这个来自MSDN文档):LINQ到实体 - 把所有的字段到最后的结果

ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders; 
ObjectSet<SalesOrderDetail> details = context.SalesOrderDetails; 

var query = 
    from order in orders 
    join detail in details 
    on order.SalesOrderID equals detail.SalesOrderID 
    where order.OnlineOrderFlag == true 
    && order.OrderDate.Month == 8 
    select new 
    { 
     SalesOrderID = order.SalesOrderID, 
     SalesOrderDetailID = detail.SalesOrderDetailID, 
     OrderDate = order.OrderDate, 
     ProductID = detail.ProductID 
    }; 

如果我想要把所有出现在“命令”到田间地头最后的对象(即选择新的)除了来自细节的其他字段,我该怎么做呢?

回答

1
var query = 
    from order in orders 
    join detail in details 
    on order.SalesOrderID equals detail.SalesOrderID 
    where order.OnlineOrderFlag == true 
    && order.OrderDate.Month == 8 
    select new 
    { 
     SalesOrderHeader = order; 
     SalesOrderDetail = detail; 
    }; 
+0

看我的编辑。您可以使用两个属性(如我在那里)返回一个匿名类,也可以创建一个包含所需所有字段的具体类,并使用AutoMapper或ValueInjector映射到这些类。 – lahsrah

0

你既可以恢复整个SalesOrderHeader对象在您的查询,或使用Include方法。

ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders; 
ObjectSet<SalesOrderDetail> details = context.SalesOrderDetails; 

var query = 
    from order in orders 
    join detail in details 
    on order.SalesOrderID equals detail.SalesOrderID 
    where order.OnlineOrderFlag == true 
    && order.OrderDate.Month == 8 
    select new 
    { 
     SalesOrderID = order.SalesOrderID, 
     SalesOrderDetailID = detail.SalesOrderDetailID, 
     OrderDate = order.OrderDate, 
     ProductID = detail.ProductID, 
     Order = order 
    }; 

或者使用Include方法(假设你的SalesOrderHeader类有一个集合参考SalesOrderDetail类):

ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders; 
ObjectSet<SalesOrderDetail> details = context.SalesOrderDetails; 

var query = 
    (from order in orders 
    where order.OnlineOrderFlag == true 
    && order.OrderDate.Month == 8 
    select order).Include(x => x.Details); 
0

做这样的事情?

  var query = 
      from order in orders 
      join detail in details 
      on order.SalesOrderID equals detail.SalesOrderID 
      where order.OnlineOrderFlag == true 
      && order.OrderDate.Month == 8 
      select new 
      { 
       SalesOrderID = order.SalesOrderID, 
       SalesOrderDetailID = detail.SalesOrderDetailID, 
       OrderDate = order.OrderDate, 
       ProductID = detail.ProductID, 
       Order = order 
      };