我试图动态地将where条件附加到单个表达式对象中,然后将该表达式对象传递给将使用它的方法。但是,我不断得到“此时此类名称不可用”。
提前致谢!
更新
我终于能够创建一个working example here。
代码如下:
var view = new vw_QuickFindResult();
// This wont compile
Expression<Func<vw_QuickFindResult, bool>> where = Expression<Func<vw_QuickFindResult, bool>>(view, true);
// Build LIKE Statement
var searches = new List<String>(searchText.Split(' '));
searches.ForEach(productName =>
{
productName.Replace('"', '%');
productName.Replace('*', '%');
where = x => SqlMethods.Like(view.DocumentName, productName);
});
return DocumentCollectionService.ListQuickFind(where);
答案 0 :(得分:3)
这是一个问题:
where = x => SqlMethods.Like(view.DocumentName, productName);
您忽略了x
,而是使用刚刚初始化的view
。我怀疑你想要:
where = x => SqlMethods.Like(x.DocumentName, productName);
但是,每次替换现有的where
表达式。我认为你应该使用Joe Albhari的PredicateBuilder
。我个人也避免使用ForEach
:
var where = PredicateBuilder.False<vw_QuickFindResult>();
// Build LIKE Statement
foreach (string productName in searchText.Split(' '))
{
string like = productName.Replace('"', '%');
.Replace('*', '%');
where = where.Or(x => SqlMethods.Like(view.DocumentName, like));
}
return DocumentCollectionService.ListQuickFind(where);
(我猜你想要的功能;你可能需要PredicateBuilder.True
和And
扩展方法。)