Linq对另一个IEnumerable进行筛选

本文关键字:筛选 IEnumerable 另一个 Linq | 更新日期: 2023-09-27 18:28:37

我有两个类

public class ClassA
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class ClassB
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ClassA ClassA { get; set; }
}

我正在尝试用a类列表过滤B类列表

void Main()
    {
    var ListA = new List<ClassA>();
        var a1 = new ClassA() {Id=1, Name = "A1"};
    var a2 = new ClassA() {Id=2, Name = "A2"};
    var a3 = new ClassA() {Id=3, Name = "A3"};
    ListA.Add(a1);
    ListA.Add(a2);
    ListA.Add(a3);
    var FilterListA = new List<ClassA>();
    FilterListA.Add(a1);
    FilterListA.Add(a2);

    var ListB = new List<ClassB>();
    var b1 = new ClassB() {Id=1, Name="B1" ,ClassA= a1};
    var b2 = new ClassB() {Id=1, Name="B1", ClassA= a2};
    var b3 = new ClassB() {Id=1, Name="B1", ClassA= a3};
    var b4 = new ClassB() {Id=1, Name="B1", ClassA= a3};
    ListB.Add(b1);
    ListB.Add(b2);
    ListB.Add(b3);
    ListB.Add(b4);

如果我使用

var query = from b in ListB
            join a in FilterListA
            on b.ClassA equals a
            select new { Name = b.Name, ClassAName = a.Name };
Console.WriteLine(query.ToList());

但我想做这样的事。。。但我不知道是怎么回事

Console.WriteLine(ListB.Where(o => o.ClassA IsIncluded In FilterListA));

}

我尝试使用Contains,但没有成功。感谢

Linq对另一个IEnumerable进行筛选

这应该有效:

ListB.Where(x=>FilterListA.Any(y=>y==x.ClassA));

它从ListB中获取在FilterListA中具有等效元素的所有元素。如果列表元素中包含的ClassA对象在FilterListA中列出,则返回该对象。

编辑:正如枪2171所说,你可以使用Contains

ListB.Where(x=>FilterListA.Contains(x.ClassA));