我正在尝试解决与我问过C# 的上一个问题类似的问题 - 传递函数以派生对象属性作为参数,但用于使用实体框架
private IQueryable<Foo> Query(Query query)
{
string[] searchTerms = query.CsvData.Replace(" ", "").ToLower().Split(',');
switch (query.Type)
{
case QueryType.Name:
return dbContext.Foos.Where(ByName(query.Exclude, searchTerms));
case QueryType.Street:
return dbContext.Foos.Where(ByStreet(query.Exclude, searchTerms));
}
}
我有以下两个功能
private Expression<Func<Foo, bool>> ByName(bool _exclude, string[] _searchTerms)
{
if (_exclude)
{
return x => !_searchTerms.Contains(x.Name.Replace(" ", "").ToLower());
}
return x => _searchTerms.Contains(x.Name.Replace(" ", "").ToLower());
}
private Expression<Func<Foo, bool>> ByStreet(bool _exclude, string[] _searchTerms)
{
if (_exclude)
{
return x => !_searchTerms.Contains(x.Address.Street.Replace(" ", "").ToLower());
}
return x => _searchTerms.Contains(x.Address.Street.Replace(" ", "").ToLower());
}
哪个工作正常,但是对于所有不同的属性都有很多重复的代码要搜索。我想通过传入属性字符串来进行通用查询,从而使其更通用。
另一个问题很好地回答了直接 linq,但我希望能够在 linq-to-sql 中实现这一点
我必须建立自己的自定义表达式吗?