【问题标题】:Linq to SQL join then order byLinq to SQL join 然后按
【发布时间】:2011-12-22 20:05:55
【问题描述】:

我有以下两个类:

书页

  • chapter_title
  • 章节内顺序
  • (其他字段)

章节

  • chapter_title
  • 订购

我有一系列 book_pages 及其章节标题。我希望能够按其“chapter_title”出现在“章节”集合中的顺序对 book_page 集合进行排序,然后按“章节内的顺序”字段进行排序。

我尝试在 chapter_title 列上编写连接,然后按 chapter.order 排序,然后按 page.order_within_page,但没有运气。有什么建议吗?

我的代码:

var ordered_pages= from chapter in chapters
                        join page in book_pages
                        on chapter.chapter_title equals page.chapter_title
                        select new{order = chapter.order,page = page}

var finalList = from row in ordered_pages.OrderBy(c => c.order).ThenBy(p =>p.page.order_within_chapter)
                select row.page;

这并没有真正起作用,即使它起作用也很丑陋。我是否错过了使用 LINQ 执行此操作的某种方式?

【问题讨论】:

  • 如果您发布损坏的代码会有所帮助,因为至少在概念上,您已经完成的应该可以工作。
  • @brandon 发布您的 LINQ 查询,让我们知道它是如何不工作的。

标签: c# linq-to-sql join


【解决方案1】:

我相信这就是它应该的样子。

var ordered_pages =
        from chapter in chapters
        join page in book_pages
            on chapter.chapter_title equals page.chapter_title
        orderby page.order_within_chapter
        orderby chapter.order
        select page;

page.order_within_chapter 将首先排序,然后 chapter.order 将运行。

【讨论】:

    【解决方案2】:
    var a = db.Chapters;
    var b = db.Pages
    .Select(p => new { page = p, chapter = a.FirstOrDefault(q => q.Title == p.Caption) })
    .OrderBy(p=>p.chapter.order).ThenBy(p=>p.page.order).Select(p=>p.page).ToList();
    

    或者

    var b=db.Pages.Join(a, p => p.Caption, p => p.Title, 
    (p, q) => new { page = p, chapter = q }).OrderBy(p => p.page.Code)
    .ThenBy(p => p.chapter.t1).Select(p=>p.page).ToList();
    

    【讨论】:

    • 页面没有章节属性,有没有办法在 linq 查询中分配这种关系?如果他们已经有章节属性,我就不需要加入。只有我以纯文本形式获得的“chapter_title”
    • 太棒了。干净多了。我需要学习这个版本的 LINQ。在 c# 中使用要自然得多。非常感谢
    【解决方案3】:

    这对我有用:

       var ordered_pages = 
           from chapter in chapters
            join page in book_pages on chapter.chapter_title equals page.chapter_title
            order by page.order_within_chapter, chapter.order
           select page;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 2014-10-27
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多