LINQ函数用于在将字符串输入查询之前检查字符串是否存在

Chr*_*xon 1 .net c# linq

我目前有一个查询(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)

关于这个的任何想法?谢谢!

Ser*_*rvy 5

你可能不需要.在执行之前,您可以信任数据库为您优化查询,因此它不太可能成为问题.

那就是说,是的,你可以做到,而且也不是那么难.(如果表达式与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)

这是我发现在高级搜索屏幕上经常使用的模式.如果他们正在搜索此字段,请对此字段进行过滤,如果他们未在此字段上进行过滤,请不要包含该字段.