Linq to SQL join然后按顺序排列

时间:2011-12-22 20:05:56

标签: c# linq-to-sql join

我有以下两个类:

book_page

  • 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来做这件事的方法吗?

3 个答案:

答案 0 :(得分:8)

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();

答案 1 :(得分:7)

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

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将首先排序,然后chapter.order将运行。

答案 2 :(得分:0)

这对我有用:

   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;