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。哦,对不起,我没有注意到。美好的