具有多个连接的LINQ排序

时间:2015-01-24 18:46:32

标签: c# linq join

我继承的基本架构(没有外键):

Tasks (TaskID, Description, ElementID, UserID)
Elements (ElementID, Description)
Users (UserID, FirstName, LastName)

我需要订购List<Task>,首先是Element.Description,然后是User.FirstName,然后是User.LastName

到目前为止,我已经通过Element.Description使用以下内容进行了订购:

List<Task> tasks = db.Tasks.ToList();
List<Element> elements = db.Elements.ToList();
List<User> users = db.Users.ToList();    

tasks = tasks.Join(elements,
    t => t.ElementID,
    e => e.ElementID,
    (t, e) => new { t, e })
    .OrderBy(m => m.e.Description)
    .Select(m => m.t).ToList();

如何与多个其他实体加入/订购? (即我需要将users添加到上述查询并按其字段排序)

(我知道查询语法可能更适合连接,但我对lambda语法更熟悉/更舒服,所以它会更受欢迎)

1 个答案:

答案 0 :(得分:1)

首先需要Join使用Join列表User的{​​{1}}结果,然后使用ThenByUser字段排序:

tasks = tasks
    .Join(elements,
        t => t.ElementID,
        e => e.ElementID,
        (t, e) => new { t, e })
    .Join(users,
        x => x.t.UserID,
        u => u.UserID,
        (x, u) => new { x.t, x.e, u })
    .OrderBy(m => m.e.Description)
    .ThenBy(m => m.u.FirstName)
    .ThenBy(m => m.u.LastName)
    .Select(m => m.t)
    .ToList();