在搜索linq conditional where子句时,我发现this article,他们使用的方式如下:
var logs = from log in context.Logs
select log;
if (filterBySeverity)
logs = logs.Where(p => p.Severity == severity);
if (filterByUser)
logs = logs.Where(p => p.User == user);
但我想知道这种方法有效吗? linq会执行多少次查询?
答案 0 :(得分:5)
是的,我认为这很有效。此代码实际上不会执行任何查询,因为它不会尝试从“日志”中读取任何内容。如果是这样,它应该在同一个查询中考虑这两个条件(即包含两个条件的WHERE子句)。
但是,如果您正在使用LINQ并担心效率,那么您必须使用工具检查您编写的所有内容,以查看实际运行的查询。您可以使用SQL Server Profiler执行此操作。
答案 1 :(得分:2)
您可以使用动态LINQ(ScottGu's Article)
因此,您可以轻松地在string中创建where子句,然后将其传递给Where方法:
public string GetWhereClause()
{
string whereClause = "";
....
return whereClause
}
var logs = context.Logs.Where( GetWhereClause() );
希望这会有所帮助;)