Linq:选择列表中包含必须在另一个列表中的属性的对象

本文关键字:列表 另一个 对象 属性 包含必 选择 Linq | 更新日期: 2023-09-27 18:04:47

我已经阅读了许多使用linq和列表的解决方案,但我似乎找不到解决我的问题的方法。我在下面描述了这种情况。detail列表包含了系统中的每一个细节。

List<Detail> allDetails
Detail
    List<Program> programs
Program
    int ID
    int code

我有一个特定角色可以访问的程序id列表。

int[] specificPrograms

要求是我需要从allDetails返回一个Details列表,其中allDetails中一个Detail的程序列表必须都包含在specificPrograms列表中。

例如:如果有2个细节包含以下程序

Detail 1
Programs   ID        Code
---------------------------------
           1         111
           2         222
           3         333
           4         444
Detail 2
Programs   ID        Code
---------------------------------
           1         111
           3         333 
SpecificPrograms contains IDs: 1, 3, 4

只返回Detail 2,因为每个Detail中的程序必须存在于specificPrograms列表中。

Linq:选择列表中包含必须在另一个列表中的属性的对象

var result = allDetails.Where(detail => detail
                 .programs.All(x => SpecificPrograms.Contains(x.ID)));