C# 按字母顺序获取名在姓之前的学生名单
所以我有一个学生名单,有名字和姓氏。我如何以给定的方式使用LINQ查询过滤它们:按字母顺序,它们的名字排在姓氏之前 我尝试了一些类似的方法C# 按字母顺序获取名在姓之前的学生名单,c#,linq,sorting,C#,Linq,Sorting,所以我有一个学生名单,有名字和姓氏。我如何以给定的方式使用LINQ查询过滤它们:按字母顺序,它们的名字排在姓氏之前 我尝试了一些类似的方法 var newStudents = from s in students where s.FirstName < s.LastName select s; var新闻学生= 从学生中学习英语 其中s.FirstNameString.Compare(s.FirstName,s.LastName,Strin
var newStudents =
from s in students
where s.FirstName < s.LastName
select s;
var新闻学生=
从学生中学习英语
其中s.FirstName
我在这里面临的问题是字符串不能以这种方式进行比较
学生们还有一个包含分数的整数列表,还有另一个查询。我需要提取所有2年级出现两次的学生。例如,我需要选择成绩
{2,3,4,5,2}
的学生,但忽略成绩{2,3,4,5,6}
的学生
按字母顺序获取名在姓之前的学生名单
这将筛选出FirstName
在LastName
之前的学生,并按FirstName
排序,然后按LastName
排序:
var newStudents = students
.Where(s => String.Compare(s.FirstName, s.LastName, StringComparison.Ordinal) < 0) // Filter students whose FirstName is before LastName
.OrderBy(s => s.FirstName) // Order by FirstName
.ThenBy(s => s.LastName); // If FirstNames are equal, then order by LastName
var newStudents=学生
.Where(s=>String.Compare(s.FirstName,s.LastName,StringComparison.Ordinal)<0)//筛选名字在LastName之前的学生
.OrderBy(s=>s.FirstName)//按FirstName排序
.ThenBy(s=>s.LastName);//如果名字相等,则按姓氏排序
请注意,我使用的是区分大小写的StringComparison.Ordinal
。您可能希望改用StringComparison.OrdinalIgnoreCase
按字母顺序获取名在姓之前的学生名单
这将筛选出FirstName
在LastName
之前的学生,并按FirstName
排序,然后按LastName
排序:
var newStudents = students
.Where(s => String.Compare(s.FirstName, s.LastName, StringComparison.Ordinal) < 0) // Filter students whose FirstName is before LastName
.OrderBy(s => s.FirstName) // Order by FirstName
.ThenBy(s => s.LastName); // If FirstNames are equal, then order by LastName
var newStudents=学生
.Where(s=>String.Compare(s.FirstName,s.LastName,StringComparison.Ordinal)<0)//筛选名字在LastName之前的学生
.OrderBy(s=>s.FirstName)//按FirstName排序
.ThenBy(s=>s.LastName);//如果名字相等,则按姓氏排序
请注意,我使用的是区分大小写的StringComparison.Ordinal
。您可能希望改用StringComparison.OrdinalIgnoreCase
。Darkbound的解决方案:
var newStudents =
from s in students
where s.FirstName.CompareTo(s.LastName) < 0
select s;
var新闻学生=
从学生中学习英语
其中s.FirstName.CompareTo(s.LastName)<0
选择s;
Darkbound的解决方案:
var newStudents =
from s in students
where s.FirstName.CompareTo(s.LastName) < 0
select s;
var新闻学生=
从学生中学习英语
其中s.FirstName.CompareTo(s.LastName)<0
选择s;
如果您正在使用Linq to对象,这将起作用
var filteredStudents =
from student in students
where String.Compare(s.FirstName, s.LastName, StringComparison.Ordinal) < 0
order by student.FirstName, student.LastName
select student;
var filteredStudents=
从学生到学生
其中String.Compare(s.FirstName、s.LastName、StringComparison.Ordinal)<0
按student.FirstName、student.LastName排序
选择学生;
我不知道它是否也适用于LINQtoSQL。如果您使用的是LINQtoobjects,那么这就可以了
var filteredStudents =
from student in students
where String.Compare(s.FirstName, s.LastName, StringComparison.Ordinal) < 0
order by student.FirstName, student.LastName
select student;
var filteredStudents=
从学生到学生
其中String.Compare(s.FirstName、s.LastName、StringComparison.Ordinal)<0
按student.FirstName、student.LastName排序
选择学生;
我不知道它是否也适用于Linq to SQL。最初有两个问题(我回滚了这个问题): (一) 如何以给定的方式使用LINQ查询过滤它们:它们的第一个查询 名字按字母顺序排在姓氏之前 (二) 我需要选择成绩
{2,3,4,5,2}
的学生,但忽略
成绩{2,3,4,5,6}
的学生
关于问题1:与其他成员一样,我确实建议使用OrderBy
和ThenBy
方法。
至于第二个问题:你必须对数据进行分组,并获得出现两次的2级计数。请参见一个示例(使用LinqPad):
最初有两个问题(我将问题回滚): (一) 如何以给定的方式使用LINQ查询过滤它们:它们的第一个查询 名字按字母顺序排在姓氏之前 (二) 我需要选择成绩
{2,3,4,5,2}
的学生,但忽略
成绩{2,3,4,5,6}
的学生
关于问题1:与其他成员一样,我确实建议使用OrderBy
和ThenBy
方法。
至于第二个问题:你必须对数据进行分组,并获得出现两次的2级计数。请参见一个示例(使用LinqPad):
我建议研究一下LINQ,还有,这里有一篇MSDN文章,关于,你的问题几乎是两个独立的问题。我建议删除第二个问题(关于分数),必要时单独提问。它实际上与按名称然后再按另一个名称排序无关。对于字符串问题,可以使用string.CompareTo(),这对字符串排序很有用。如果你能包含更多关于你如何存储他们成绩的代码,那会很有帮助。如果你解决了你的问题,把它作为一个答案发布出来。不要编辑您的问题。@Darkbound将此作为一个单独的问题提问。我建议您研究LINQ的问题,同时,这里有一篇MSDN文章,内容也是,您的问题几乎是两个单独的问题。我建议删除第二个问题(关于分数),必要时单独提问。它实际上与按名称然后再按另一个名称排序无关。对于字符串问题,可以使用string.CompareTo(),这对字符串排序很有用。如果你能包含更多关于你如何存储他们成绩的代码,那会很有帮助。如果你解决了你的问题,把它作为一个答案发布出来。不要编辑您的问题。@Darkbound将其作为单独的问题提问。谢谢,您对我的第二个问题的解决方案真的很有效!请你解释一下这行代码,其中(s=>s.Grades.GroupBy(r=>r).Any(g=>g.Count(a=>a==2)>1))代码>嗯<代码>其中接受布尔值