C# 是否有人可以使用lambda将以下linq查询语法转换为方法语法?

C# 是否有人可以使用lambda将以下linq查询语法转换为方法语法?,c#,linq,lambda,C#,Linq,Lambda,输出如下: var studentsWithStandard = standardList.GroupJoin(studentList, stand => stand.StandardID, s => s.StandardID, (stand, students) => new {StandardName = stand.StandardName, studentGroup = students}).OrderBy(an => an.Stand

输出如下:

 var studentsWithStandard  = standardList.GroupJoin(studentList, stand => stand.StandardID, s => s.StandardID,
            (stand, students) => new {StandardName = stand.StandardName, studentGroup = students}).OrderBy(an => an.StandardName);
standardList
    .Join(studentList,
        stad => stad.StandardID,
        s => s.StandardID,
        (stad, s) => new { Standard = stad, Student = s })
    .OrderBy(x => x.Standard.StandardName)
    .ThenBy(x => x.Student.StudentName)
我是从你那儿得到的 提前感谢。

根据我的经验,join是一个查询语法比lambda语法更可读的地方,但不管怎样

我强烈推荐深入阅读乔恩·斯基特的优秀著作C。关于LINQ的章节非常清楚地解释了各种查询语法的含义

只有一个from的联接表达式将转换为联接方法,而不是GroupJoin。GroupJoin在加入前有两个From时使用

您可能希望它执行内部联接:

John is in Standard 1
Steve is in Standard 1
Bill is in Standard 2
Ram is in Standard 2

您可以这样翻译查询:

 var studentsWithStandard  = standardList.GroupJoin(studentList, stand => stand.StandardID, s => s.StandardID,
            (stand, students) => new {StandardName = stand.StandardName, studentGroup = students}).OrderBy(an => an.StandardName);
standardList
    .Join(studentList,
        stad => stad.StandardID,
        s => s.StandardID,
        (stad, s) => new { Standard = stad, Student = s })
    .OrderBy(x => x.Standard.StandardName)
    .ThenBy(x => x.Student.StudentName)
请注意,@JamesFaix的答案提供了一个更有效的、更少文字的版本,它结合了Join和Select

这实际上是查询不需要的查询理解版本:

var ans = standardList.Join(studentList, stad => stad.StandardID, s => s.StandardID, (stad, s) => new { stad, s })
                      .OrderBy(stads => stads.stad.StandardName).ThenBy(stads => stads.s.StudentName)
                      .Select(stads => new { stads.s.StudentName, stads.stad.StandardName });
注意:查询的严格转换将涉及GroupJoin/SelectMany,但这不是必需的,因为您没有尝试进行左连接:

var studentsWithStandard = from stad in standardList
                           join s in studentList on stad.StandardID equals s.StandardID
                           orderby stad.StandardName, s.StudentName
                           select new {
                               StudentName = s.StudentName,
                               StandardName = stad.StandardName
                           };

为什么要将可读的LINQ查询转换为不可读的LINQ查询?对于Join,我肯定更喜欢不得到答案的问题。只会得到反对票。问问题是犯罪吗?为什么我会得到反对票?他的问题中有两张来自,但不需要得到他的答案。您还取消了Select。Join的最后一个参数基本上是Select。哦,对不起,我没有注意到。美好的