C# 具有的LINQ Where子句包含列表具有复杂对象的位置
我已经看到了很多在简单对象列表中包含的LINQ示例:C# 具有的LINQ Where子句包含列表具有复杂对象的位置,c#,linq,C#,Linq,我已经看到了很多在简单对象列表中包含的LINQ示例: var intList= new List<int>() { 1, 2, 3 }; var result = db.TableRecords.Where(c => intList.Contains(c.RecordId)).ToList(); 现在我想得到与前一个示例类似的结果,但是列表中现在有一个匿名类型,其中有两个int。那么我现在如何获得result,其中TableRecords中的RecordId等于xzList中
var intList= new List<int>() { 1, 2, 3 };
var result = db.TableRecords.Where(c => intList.Contains(c.RecordId)).ToList();
现在我想得到与前一个示例类似的结果,但是列表中现在有一个匿名类型,其中有两个int。那么我现在如何获得
result
,其中TableRecords
中的RecordId
等于xzList
中每个匿名类型的AId
?听起来您不确定如何从匿名类型中获取值。您可以使用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()
因为您是在匿名类型中命名值,所以引用它们就像引用属性一样
如果您喜欢采用更结构化的方法,您可以使用这种方法。类似这样的方法:
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()
var intList=xzList.Select(listObject=>listObject.AId).ToList();我正要写
c=>xzList.Any(n=>n.AId==c.RecordId)
,但大致相同。如果您想先将所有的代码> Audio<代码>转储到一个单独的集合(可能更快,“GunNel3510的解决方案”),考虑使用<代码> HasStuts<代码>,例如:<代码>新的HASSET(XZList.SELECT(n=> N.AID))< /C> >,所以看起来我需要将列表中的内容用ANON对象转储到仅int的列表中,然后执行新列表中的包含操作。我想我在想还有其他方法可以引用列表。Contains(),但它开始不是那样了。@SailingJudo不,这不是唯一的可能性。如果您愿意,您可以使用我第一条评论的lambda箭头。@SailingJudo:如果db
对象是某种SQLDataContext
,您不想在xzlist
上调用.ToList()
,除非您有尚未说明的理由这样做。如果您这样做了,您将进行两个相对昂贵的db调用,而不是一个。