LINQ Where子句,包含列表中包含的复杂对象

本文关键字:包含 复杂 对象 列表 子句 LINQ Where | 更新日期: 2023-09-27 17:49:38

我见过很多LINQ在简单的对象列表中使用contains的例子:

var intList= new List<int>() { 1, 2, 3 };
var result = db.TableRecords.Where(c => intList.Contains(c.RecordId)).ToList();

我想我要做的似乎有点复杂。我有一行类似于下面的代码,可以得到我需要的列表:

var xzList = db.Relations.Where(r => someOtherList.Contains(r.zId))
                         .Select(r => new { AId = r.xId, BId = r.zId })
                         .ToList();

现在我想得到与前面示例类似的结果,但是列表现在有一个匿名类型,包含两个int型。那么我现在怎么得到result呢,其中TableRecords中的RecordId等于xzList中的每个匿名类型的匿名类型中的AId呢?

LINQ Where子句,包含列表中包含的复杂对象

听起来您不确定如何从匿名类型中获取值。你可以使用GunnerL3510的解决方案将其转储到列表中,或者你应该能够像这样内联它:

var result = 
    db.TableRecords
        .Where(c => xzList.Select(n => n.AId)
            .Contains(c.RecordId))
        .ToList();

由于您在匿名类型中命名值,因此可以像引用属性一样引用它们。

如果您喜欢使用更结构化的方法,您可以使用此方法

像这样:

db.TableRecords.Select(c=>c.RecordId).Intercept(xzList.Select(n => n.AId)).Any()