C# 与Linq一起订购

C# 与Linq一起订购,c#,linq,one-to-many,C#,Linq,One To Many,我与两个实体有一对多关系: Order: int OrderId string OrderNumber ... OrderItem: int ItemId int sequence decimal Quantity ... 一个Order有多个OrderItems,我想写一个Linq,返回所有订单及其项目,项目按顺序字段排序。 如何编写以下查询之类的查询 Order myOrder = db.Orders.Include("OrderItems").Include("sequence").

我与两个实体有一对多关系:

Order:
int OrderId 
string OrderNumber
...

OrderItem:
int ItemId
int sequence
decimal Quantity
...
一个
Order
有多个
OrderItems
,我想写一个Linq,返回所有订单及其项目,项目按顺序字段排序。 如何编写以下查询之类的查询

Order myOrder = db.Orders.Include("OrderItems").Include("sequence").FirstOrDefault(x => x.OrderId == 3);
我建议使用lambdas来避免查询中的神奇字符串

var result = from a in Order 
             join b in OrderItems
                on a.Id equals b.OrderId
             order by b.sequence
             select new
             {     
                 a.Id,
                 b.sequence,
                 ...
             };

我建议使用lambdas来避免查询中的神奇字符串。

如果不将结果投影到新类型中,就无法做到这一点

var result = from a in Order 
             join b in OrderItems
                on a.Id equals b.OrderId
             order by b.sequence
             select new
             {     
                 a.Id,
                 b.sequence,
                 ...
             };
var myOrder= db.Orders.Include("OrderItems")
             .Where(x => x.OrderId == 3)  
             .Select(o => new {
                 order = o,
                 orderItems = o.OrderItems.OrderBy(i => i.sequence)
             }).FirstOrDefault();

// Usage
myOrder.order; // Order

myOrder.order.OrderItems; // OrderItems
myorder.orderItems;  // OrderItems alternative

虽然将其投影到一个新对象中并不理想,但根据,现在有一个很好的副作用,即排序。匿名对象上的OrderItems也将正确排序。

如果不将结果投影到一个新类型中,则无法做到这一点

var myOrder= db.Orders.Include("OrderItems")
             .Where(x => x.OrderId == 3)  
             .Select(o => new {
                 order = o,
                 orderItems = o.OrderItems.OrderBy(i => i.sequence)
             }).FirstOrDefault();

// Usage
myOrder.order; // Order

myOrder.order.OrderItems; // OrderItems
myorder.orderItems;  // OrderItems alternative

虽然将其投影到新对象中并不理想,但根据,现在有一个很好的副作用,即排序。匿名对象上的OrderItems也将正确排序。

但使用此方法,我无法访问序列,因为a.OrderItems是订单项列表而不是简单的订单项,但使用此方法我无法访问序列,因为a.OrderItems是订单项列表而不是简单的订单项谢谢Niranjan,我编辑了我的代码您能再次检查吗?谢谢Niranjan,我编辑了我的代码,你能再检查一遍吗?它返回一个匿名类型的集合。每个项目都有
order
orderItems
属性。如果我的方法必须返回订单类型而不是匿名类型,那该怎么办?恐怕你要的是不可能的。但是匿名对象上的
order
属性是实际的
order
。我编辑了我的答案,以显示编辑问题的用法和原因。它返回匿名类型的集合。每个项目都有
order
orderItems
属性。如果我的方法必须返回订单类型而不是匿名类型,那该怎么办?恐怕你要的是不可能的。但是匿名对象上的
order
属性是一个实际的
order
。我编辑了我的答案,以显示对问题编辑的用法和说明。