Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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_Any - Fatal编程技术网

C# 如何在LINQ中包含基于条件的列表

C# 如何在LINQ中包含基于条件的列表,c#,linq,any,C#,Linq,Any,我有以下代码: ClassroomList.Where(x => x.StudentList.Any(y => y.IsMale) == true); 仅当StudentListIsMale==true中的所有学生时,此代码才会返回ClassroomList,但如果至少有1个IsMale==false,则不会返回任何值 如何始终返回仅包含那些具有IsMale==true的学生的教室列表 以下是ClassroomList的课程: public partial class Classr

我有以下代码:

ClassroomList.Where(x => x.StudentList.Any(y => y.IsMale) == true);
仅当StudentList
IsMale==true
中的所有学生时,此代码才会返回
ClassroomList
,但如果至少有1个
IsMale==false
,则不会返回任何值

如何始终返回仅包含那些具有
IsMale==true
的学生的教室列表

以下是ClassroomList的课程:

public partial class ClassroomList
{
    public ClassroomList(){}
    public list<Student> StudentList {get; set;}
}
下面是预期输出的示例

Classroomlist Count |  Studentlist Count |  Male | Female | 
         2                    5              3       2       
         2                    10             10      0
         2                    8              0       8
预期产出:

1. ClassroomList[1].Studentlist[2]
2. ClassroomList[1].Studentlist[9]
3. ClassroomList[1].Studentlist == null

根据编辑的预期输出,您可以使用:

 var results = (from r in ClassroomList
               let grp = r.StudentList.GroupBy(x => x.IsMale)
               select new
               {
                   ClassRoomsCount = ClassroomList.Count(),
                   StudentsCount = r.StudentList.Count,
                   Male = grp.Where(x => x.Key).Count(),
                   Female = grp.Where(x => !x.Key).Count()
               }).ToList();

旁注:您可以删除这一行
public ClassroomList(){}
编译器已经创建了一个隐藏的默认构造函数,因此无需自己创建。

根据编辑的预期输出,您可以使用以下方法:

 var results = (from r in ClassroomList
               let grp = r.StudentList.GroupBy(x => x.IsMale)
               select new
               {
                   ClassRoomsCount = ClassroomList.Count(),
                   StudentsCount = r.StudentList.Count,
                   Male = grp.Where(x => x.Key).Count(),
                   Female = grp.Where(x => !x.Key).Count()
               }).ToList();

旁注:您可以删除这一行
public ClassroomList(){}
编译器已经创建了一个隐藏的默认构造函数,所以无需自己创建。

您已经做到了,只需使用
all
扩展即可

ClassroomList.Where(x => x.StudentList.All(y => y.IsMale));
在你更新问题之后,你似乎需要这样的东西

var result = ClassroomList
                .Select(x=> new 
                 {
                     StudentListCount = x.StudentList.Count(),
                     MaleCount = x.StudentList.Count(c=>c.IsMale),
                     FemaleCount = x.StudentList.Count(c=>!c.IsMale),
                 };

你们都在那里,只需使用
all
extension

ClassroomList.Where(x => x.StudentList.All(y => y.IsMale));
在你更新问题之后,你似乎需要这样的东西

var result = ClassroomList
                .Select(x=> new 
                 {
                     StudentListCount = x.StudentList.Count(),
                     MaleCount = x.StudentList.Count(c=>c.IsMale),
                     FemaleCount = x.StudentList.Count(c=>!c.IsMale),
                 };

添加一个内部where过滤器

ClassroomList.Where(x=>x.StudentList.All(y=>y.IsMale))

更新: 你需要这样吗

ClassroomList。选择(x=>newclassroomlist{
StudentList=x.StudentList.Where(y=>y.IsMale).ToList()
}

)

添加一个内部where过滤器

ClassroomList.Where(x=>x.StudentList.All(y=>y.IsMale))

更新: 你需要这样吗

ClassroomList。选择(x=>newclassroomlist{
StudentList=x.StudentList.Where(y=>y.IsMale).ToList()
}


)

如果这不是问题的答案,您可以随时取消您的投票;-)我无法将其还原为0,它将被否决:P。我知道这也是一个正确的答案,但我也回答了,因此我将为我的答案辩护:)嗨,我不知道我的问题是否错误,因为所有答案都是常见的,但它不能解决我的问题。让我们看看,对于给定的解决方案,只有当StudentList中的所有学生都是MALE时,才会返回ClassroomList。ClassroomList应该总是有一个值,而StudentList只有一个值Males@user3770093检查更新,这将产生您想要的输出如果这不是问题的答案,您可以随时使您的投票无效;-)我无法将其还原为0,它将被否决:P。我知道这也是一个正确的答案,但我也回答了,因此我将为我的答案辩护:)嗨,我不知道我的问题是否错误,因为所有答案都是常见的,但它不能解决我的问题。让我们看看,对于给定的解决方案,只有当StudentList中的所有学生都是MALE时,才会返回ClassroomList。ClassroomList应该总是有一个值,而StudentList只有一个值Males@user3770093检查更新,这应该会产生你想要的输出。这会编译吗
x.StudentList。其中(y=>y.IsMale)
不返回布尔值。@user3185569绝对是!因为学生名单也是一个电子数码学,所以它。它不会编译。其中需要
Func
表示接受
ClassroomList
作为参数并返回
布尔值的函数。函数
x.StudentList.Where(y=>y.IsMale)
不返回
布尔值。试试看,你会得到一个编译时错误。@user3185569是的,你是正确的
All
是正确的API,谢谢!嗨,我不知道我的问题是不是错了,因为所有的答案都是常见的,但这并不能解决我的问题。让我们看看,对于给定的解决方案,只有当StudentList中的所有学生都是MALE时,才会返回ClassroomList。ClassroomList应该总是有一个值,而StudentList只有一个值。是否编译
x.StudentList。其中(y=>y.IsMale)
不返回布尔值。@user3185569绝对是!因为学生名单也是一个电子数码学,所以它。它不会编译。其中需要
Func
表示接受
ClassroomList
作为参数并返回
布尔值的函数。函数
x.StudentList.Where(y=>y.IsMale)
不返回
布尔值。试试看,你会得到一个编译时错误。@user3185569是的,你是正确的
All
是正确的API,谢谢!嗨,我不知道我的问题是不是错了,因为所有的答案都是常见的,但这并不能解决我的问题。让我们看看,对于给定的解决方案,只有当StudentList中的所有学生都是MALE时,才会返回ClassroomList。ClassroomList应该总是有一个值,而StudentList只有一个值。我不知道我的问题是否错了,因为所有答案都是常见的,但它不能解决我的问题。让我们看看,对于给定的解决方案,只有当StudentList中的所有学生都是MALE时,才会返回ClassroomList。ClassroomList应该始终有一个值,而StudentList将只包含男性。也谢谢你的提示。我想我会修改我的问题以添加更多内容details@user3770093不清楚你想要什么。检查编辑。嗨,我不知道我的问题是否错了,因为所有的答案都是常见的,但它不能解决我的问题。让我们看看,对于给定的解决方案,只有当StudentList中的所有学生都是MALE时,才会返回ClassroomList。ClassroomList应该始终有一个值,而StudentList将只包含男性。也谢谢你的提示。我想我会修改我的问题以添加更多内容details@user3770093不清楚你想要什么。检查编辑。@Disperado hi谢谢我已签出,它会抛出一个错误,说无法将IEnumerable转换为Icollection。是否不再需要使用Any()或All()?哦,主要错误是“实体或复杂类型..无法在LINQ to Entities查询中构造”
StudentList=x.StudentList.Where(y=>y.IsMale).ToList()
@Desperado嗨,谢谢我检查过了,它抛出了一个