gpt4 book ai didi

LINQ 分组帮助

转载 作者:行者123 更新时间:2023-12-02 02:30:45 25 4
gpt4 key购买 nike

我有一个数据库表,其中包含与类别表非常相似的父项和子项记录。此表的 ParentID 字段包含该记录的父记录的 ID...

我的表格列是:SectionID、Title、Number、ParentID、Active

我只打算让我的 parent 与 child 的关系深入两个层次。所以我有一个部分和一个子部分。

我需要像这样以大纲方式将这些数据输出到我的 MVC View 页面中......

  1. 第 1 部分
    • 第 1 小节,共 1 小节
    • 第 2 小节,共 1 小节
    • 第 3 小节,共 1 小节
  2. 第 2 部分
    • 第 1 部分,共 2 部分
    • 第 2 小节,共 2 小节
    • 第 3 小节,共 2 小节
  3. 第 3 部分

我正在使用 Entity Framework 4.0 和 MVC 2.0,并且从未尝试过使用 LINQ 进行类似的操作。我在节表上设置了一个 FK,将 ParentID 映射回 SectionID,希望 EF 会创建一个复杂的“节”类型,其中子节作为节类型列表的属性,但也许我没有正确设置。

所以我猜我仍然可以使用 LINQ 查询获得最终结果。有人可以指出一些示例代码,以提供解决方案或可能在正确方向上的提示吗?

alt text

更新:

我能够理顺我的 EDMX,以便我可以获得每个部分的子部分作为类型列表的属性,但现在我意识到我需要对相关实体进行排序。

var sections = from section in dataContext.Sections
where section.Active == true && section.ParentID == 0
orderby section.Number
select new Section
{
SectionID = section.SectionID,
Title = section.Title,
Number = section.Number,
ParentID = section.ParentID,
Timestamp = section.Timestamp,
Active = section.Active,
Children = section.Children.OrderBy(c => c.Number)
};

产生以下错误。无法将类型“System.Linq.IOrderedEnumerable”隐式转换为“System.Data.Objects.DataClasses.EntityCollection”

最佳答案

您的模型有两个导航属性 Sections1Section1。将第一个重命名为 Children,将第二个重命名为 Parent

根据您是否有一个根部分,或者每个顶级部分是否有自己的父部分(或者让父部分可以为空?),您的查询可能看起来像:-

  // assume top sections are ones where parent == self
var topSections = context.Sections.Where(section => section.ParentId == SectionId);

// now put them in order (might have multiple orderings depending on input, pick one)
topSections = topSections.OrderBy(section => section.Title);

// now get the children in order using an anonymous type for the projection
var result = topSections.Select(section => new {top = section, children = section.Children.OrderBy(child => child.Title)});

关于LINQ 分组帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3869261/

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