我知道一个典型的方法是这样的: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