首页 > 解决方案 > 如何在 ICollection 属性上使用 Any() 方法创建表达式树?

问题描述

我正在尝试创建表达式树来动态更改谓词,我有一个如下所示的实体

产品

目录号(pk)

供应商 ID

ProductToVendor(集合/导航属性)

我创建了如下表达式树

Expression<Func<Product, bool>> finalExpression = null;
List<Expression> expressionList = new List<Expression>();
var parameter = Expression.Parameter(typeof(Product), "p");

//Create predicate using expression tree
foreach (var keycolumn in request.KeyColumns)
{
    expressionList.Add(Expression.Equal(
                        Expression.Property(parameter, keycolumn.ColumnName),
                        Expression.Constant(keycolumn.ColumnValue, typeof(string))
                      ));
}

expressionList.Add(Expression.Equal(
              Expression.Property(parameter, "SiteId"),
              Expression.Constant(request.SiteId, typeof(int))
           ));

我希望谓词是这样的

var vf = Context.Set<Product>().Where(p => p._ProductToVendor.Any(v => v.VendorId == VendorId) && p.SiteId == SiteId && p.CatalogNumber == catalogNo).ToList();

我试过 堆栈溢出 | 子集合 List.Any 的表达式树

但我无法获得预期的结果,任何人都可以帮忙!

标签: c#lambdaexpression

解决方案


推荐阅读