gpt4 book ai didi

asp.net - 为 MVC View 订购 Entity Framework 项和子项

转载 作者:行者123 更新时间:2023-12-04 17:55:54 26 4
gpt4 key购买 nike

如何对 DbSet 中的查询进行排序并包含也应排序的子项。

例子:

我有一个调度订单的模型。

public class Order
{
public virtual int Id { get; set; }
public virtual int? SchedulingOrder { get; set; }
public virtual int? WeekId { get; set; }
public virtual Week Week { get; set; }
}
public class Week
{
public virtual int Id { get; set; }
public virtual DateTime StartDate { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
...
public DbSet<Week> Weeks { get; set; }
public DbSet<Order> Orders { get; set; }

然后是一个 Action 方法
public ActionResult ShopSchedule()
{
return View(db.Weeks.OrderBy(w => w.StartDate)
.Include(w => w.Orders.OrderBy(o => o.SchedulingOrder))
.ToList());
}

我认为这是行不通的,因为 Include 的性质.我是否必须创建一个单独的 View 模型并映射到它?或者有什么方法可以在查询中解决它?人们说 new { left = right, etc } 有某种语法。在查询中?

相关问题:
Ordering Entity Framework sub-items for EditorFor
C# Entity Framework 4.1 Lambda Include - only select specific included values

最佳答案

值得注意的是,这里的其他 2 个解决方案通过 SQL 提取数据,然后在内存中重新排序,这在查询和后处理期间的性能方面非常浪费。此解决方案仅通过 SQL 即可一次性完成,无需额外的内存步骤。

可以按照此处的第二种方法中所述完成:
How to order child collections of entities in EF

喜欢:

db.VendorProducts.Select(p =>
new { Product = p, S = p.Schedules.OrderBy(s => s.From) })
.FirstOrDefault(q => q.Product.Id == id).Product

因此,您无需使用 Include 语句,而是在匿名对象中调用相关数据以及要获取的原始根数据,在该子查询中对其进行排序,最后返回根数据。顺序保持不变。扭曲,但它的工作原理。

要坚持使用原始代码:
db.Weeks.Select(w => new { W = w, O = w.Orders.OrderBy(o => o.SchedulingOrder) })
.OrderBy(q => q.W.StartDate).Select(q => q.W);

关于asp.net - 为 MVC View 订购 Entity Framework 项和子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9066450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com