2009-10-26 244 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來完成此操作。