2009-10-26 139 views
5

当搜索LINQ条件where子句中,我发现this article,他们使用的方法是象下面这样:LINQ的条件Where子句

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

我已经看过答案,我认为这种方法虽然效率较低,但从类型安全的角度来看,确实好得多。毕竟,一开始,LINQ的设计是为了避免动态查询,所以它是毫无意义的,其次,如果你不小心,它总是倾向于SQL注入。 – 2015-09-27 05:25:07

回答

2

您可以使用动态LINQ(ScottGu's Article

所以,你可以轻松地创建其中的字符串,然后条款将它传递给Where方法:

public string GetWhereClause() 
{ 
string whereClause = ""; 
.... 
return whereClause 
} 

var logs = context.Logs.Where(GetWhereClause()); 

希望这有助于;)

+2

与我提供的代码相比,您认为哪种方式更高效? – silent 2009-10-26 11:09:30

5

是的,我认为这是有效的。这段代码实际上不会执行任何查询,因为它不会尝试从“日志”中读取任何内容。当它这样做时,它应该在同一个查询中考虑这两个条件(即包含两个条件的WHERE子句)。但是,如果你正在使用LINQ并担心效率问题,那么你必须通过使用工具来检查你写的所有内容,以查看实际运行的查询。您可以使用SQL Server Profiler来完成此操作。