Order by with Linq

最后都变了- 提交于 2019-12-11 03:25:18

问题


I have a One-Many relation with two Entities :

Order:
int OrderId 
string OrderNumber
...

OrderItem:
int ItemId
int sequence
decimal Quantity
...

One Order Has multiple OrderItems, I want to write a Linq that return all orders with their items and items be sorted by sequence field. How can i write a query such as following query?

Order myOrder = db.Orders.Include("OrderItems").Include("sequence").FirstOrDefault(x => x.OrderId == 3);

回答1:


You can't do that without projecting the results into a new type.

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

Whilst it's not ideal projecting it into a new object, according to this blog post, there is a nice side-effect that now order.OrderItems on your anonymous object will be sorted correctly too.




回答2:


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,
                 ...
             };



回答3:


var temp = db.Orders.Include("OrderItems").Select(q => q.OrderItems.OrderBy(p => 
                     p.sequence)).ToList();



回答4:


var Orders = db.Orders.Include(a => a.OrderItems)
.OrderBy(a => a.OrderItems.sequence).ToList()

I recommend using lambdas to avoid the magic strings in your query.



来源:https://stackoverflow.com/questions/14474320/order-by-with-linq

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!