【问题标题】:LINQ ordering with multiple joins具有多个连接的 LINQ 排序
【发布时间】:2015-03-23 14:50:57
【问题描述】:

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

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 语法变得更加熟悉/熟悉,所以它会是首选)

【问题讨论】:

    标签: c# linq join


    【解决方案1】:

    您首先需要Join 将您的第一个Join 的结果与User 列表一起使用,然后使用ThenBy 按User 字段排序:

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

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      相关资源
      最近更新 更多