我目前有一个查询(psuedo代码在这里!),例如:
var query = p.Companies.Any((a => a.Name != "" || a.Name.Contains(variable1) &&
(a => a.Description != "" || a.Description.Contains(variable2));
Run Code Online (Sandbox Code Playgroud)
现在,很明显这是我想要做的还有更多的领域为我检查的简化版本,但我的回答的基础是 - 我可以创造的基石,也是这样一个函数/表达式它只生成它需要的SQL?
如:
Expression<Func<Company, bool>> companyQuery;
if(!String.IsNullOrEmpty(variable1)) {
// build up my expression
}
// Pass expression through to query when finalized
Run Code Online (Sandbox Code Playgroud)
关于这个的任何想法?谢谢!
你可能不需要.在执行之前,您可以信任数据库为您优化查询,因此它不太可能成为问题.
那就是说,是的,你可以做到,而且也不是那么难.(如果表达式与OR语义相结合,那么它将会更加有效.
IQueryable<Company> query = p.Companies.AsQueryable();
if(!string.IsNullOrEmpty(variable1))
query = query.Where(company => company.Name != "" || company.Name.Contains(variable1));
if(!string.IsNullOrEmpty(variable2))
query = query.Where(company => company.Description != "" || company.Description .Contains(variable1));
bool result = query.Any();
Run Code Online (Sandbox Code Playgroud)
这是我发现在高级搜索屏幕上经常使用的模式.如果他们正在搜索此字段,请对此字段进行过滤,如果他们未在此字段上进行过滤,请不要包含该字段.
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |