我有一个带有列表项的模型:

public class Student{
    public int StudentId { get; set; }
    public int ClassId { get; set; }
}

表值如下所示:

StudentId ClassId
1 8
2 6
1 3
3 8
2 3
3 2
4 8
1 6
3 6
2 2

筛选器的类ID列表:

ClassId
8
6

我要 Select 位于所有筛选器类ID中的StudentID列表.

StudentId
1
3

我使用以下代码,但不起作用:

List<int> lstStudentId = Students.GroupBy(o => o.StudentId).Where(o => o.All(m => filterClassId.All(s => s == m.ClassId ))).Select(o => o.Key).ToList();

推荐答案

你写道:

List<int> lstStudentId = Students
    .GroupBy(o => o.StudentId)
    .Where(o => o.All(m => filterClassId.All(s => s == m.ClassId)))
    .Select(o => o.Key).ToList();

Where判断所有学生的班级都在过滤器中...但你想要相反的结果,所有过滤过的类都在学生身上.

只要扭转情况就行了:

var lstStudentId = Students
    .GroupBy(o => o.StudentId)
    .Where(g => filterClassId.All(f => g.Any(s => s.ClassId == f)))
    .Select(g => g.Key)
    .ToList();

另一种方法是判断筛选器减go 学生的类是否没有结果.则该学生拥有筛选器中的所有类:

var lstStudentId = Students
    .GroupBy(o => o.StudentId)
    .Where(g => !filterClassId.Except(g.Select(s => s.ClassId)).Any())
    .Select(g => g.Key)
    .ToList();

Csharp相关问答推荐

如何从C#中有类.x和类.y的类列表中映射List(字符串x,字符串y)?

在C#WinUI中,一个关于System的崩溃."由于未知原因导致执行不例外"

不仅仅是一个简单的自定义按钮

REST API端点中异步后台代码执行的类型

如何在不考虑年份的情况下判断日期时间是否在某个日期范围内?

用C#调用由缓冲区指针参数组成的C API

C#EF Core WHERE IN LINQ FROM LIST WITH.CONTAINS不返回任何内容

Amazon SP-API确认发货不设置&Quot;递送服务

如何在实体框架中添加包含列表?

StackExchange.Redis.RedisServerException:调用ITransaction.ExecuteAsync()时出现错误未知命令取消监视

当前的文化决定了错误的文化

如何注册类使用多级继承与接口

从另一个不同 struct 的数组创建Newtonsoft.Json.Linq.J数组

如何使用.NET6WPF打印车票?

Lambda表达式如何与隐式强制转换一起工作?

在Docker容器中运行API项目时,无法本地浏览到index.html

异步等待Foreach循环中的ConfigureAWait(FALSE)执行什么操作?

链接到字典字符串.拆分为(.Key,.Value)

从MudAutoComplete打开对话框,列表仍然可见

C#中的逻辑运算符用作单词';is';and';and';