Linq条件Where子句

时间:2009-10-26 07:16:21

标签: linq-to-sql

在搜索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会执行多少次查询?

2 个答案:

答案 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() );

希望这会有所帮助;)