Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有多连接的LINQ排序_C#_Linq_Join - Fatal编程技术网

C# 具有多连接的LINQ排序

C# 具有多连接的LINQ排序,c#,linq,join,C#,Linq,Join,我继承的基本架构(没有外键): 我需要订购一个列表,首先按元素.描述,然后按用户.FirstName,然后按用户.LastName 到目前为止,我已通过元素进行订购。说明使用以下内容: List<Task> tasks = db.Tasks.ToList(); List<Element> elements = db.Elements.ToList(); List<User> users = db.Users.ToList(); tasks = tas

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

我需要订购一个
列表
,首先按
元素.描述
,然后按
用户.FirstName
,然后按
用户.LastName

到目前为止,我已通过
元素进行订购。说明
使用以下内容:

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();
List tasks=db.tasks.ToList();
List elements=db.elements.ToList();
List users=db.users.ToList();
任务=任务。加入(元素,
t=>t.ElementID,
e=>e.ElementID,
(t,e)=>新的{t,e})
.OrderBy(m=>m.e.Description)
.Select(m=>m.t).ToList();
我如何加入/订购多个其他实体?(即,我需要向上述查询添加
用户
,并按字段排序)


(我知道查询语法可能更适合于联接,但我已经对lambda语法更熟悉/更熟悉了,所以最好是这样)

首先需要使用
用户
列表将第一次
联接
的结果联接
,然后使用
用户
字段进行排序:

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