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);
仅当StudentListIsMale==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嗨,谢谢我检查过了,它抛出了一个