Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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# 按字母顺序获取名在姓之前的学生名单_C#_Linq_Sorting - Fatal编程技术网

C# 按字母顺序获取名在姓之前的学生名单

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

所以我有一个学生名单,有名字和姓氏。我如何以给定的方式使用LINQ查询过滤它们:按字母顺序,它们的名字排在姓氏之前

我尝试了一些类似的方法

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))嗯<代码>其中
接受布尔值