我知道一個典型的方法是這樣的:LINQ:添加where子句僅當值不爲空
IQueryable query = from staff in dataContext.Staffs;
if(name1 != null)
{
query = from staff in query where (staff.name == name1);
}
然而,我們從其他開發商接手一個項目,我們看到了這樣的代碼:
IQueryable query = from staff in dataContext.Staffs;
query = from staff in query where (name1 == null || staff.name == name1);
如果這是一個正常的SQL語句,我肯定會說第二個是不好的做法。因爲它在name1爲null時向查詢添加無意義的where子句。
但我是新來的LINQ,所以我不確定LINQ是不同的?
您可以使用SQL Server Profiler查看查詢歸結到的內容。 – alex 2011-04-26 08:34:39
在SQL中,它並不重要,因爲「name1」在運行時是已知值,查詢優化器將優化WHERE子句。事實上,您始終都會在SQL中看到這種風格。在LINQ中這樣做的好處是代碼更簡潔。它可能不會更改由LINQ-to-SQL生成的SQL語句(它可能已經消除了它),並且它絕對不會影響SQL語句的性能,即使它停留在那裏。 – 2011-04-26 11:17:08
所以我一開始就錯了...... 瞭解了,謝謝~~! – Henry 2011-04-28 07:46:56