SELECT * FROM AT where CONVERT(varchar,DateTime) like '%2011-%' 转成linq怎么写?
2个回答
展开全部
首先明确一条,楼上的同学的作法是可以的。
然后说正事。
楼主的sql写的不好,不建议这样写,因为使用CONVERT将日期列转换为字符串后再匹配的话,会导致数据库索引失效(如果有的话),进而导致全表扫描。并且由于“2011-”这样的字符串依赖于操作系统的本地化设置,如果不在转换的时候限制格式,那么可能会换个操作系统就导致sql失效。LINQ中是没法限制这个格式的。
所以正确的作法是,应该取2011-1-1到2011-12-31之间的记录,也就是这样的SQL:
select * from AT where DateTime>='2011-1-1' and DateTime<='2011-12-31'
写成LINQ就是这样的:
from a in AT where a.DateTime>=new DateTime(2011,1,1) && a.DateTime<=new DateTime(2011,12,31) select a
然后说正事。
楼主的sql写的不好,不建议这样写,因为使用CONVERT将日期列转换为字符串后再匹配的话,会导致数据库索引失效(如果有的话),进而导致全表扫描。并且由于“2011-”这样的字符串依赖于操作系统的本地化设置,如果不在转换的时候限制格式,那么可能会换个操作系统就导致sql失效。LINQ中是没法限制这个格式的。
所以正确的作法是,应该取2011-1-1到2011-12-31之间的记录,也就是这样的SQL:
select * from AT where DateTime>='2011-1-1' and DateTime<='2011-12-31'
写成LINQ就是这样的:
from a in AT where a.DateTime>=new DateTime(2011,1,1) && a.DateTime<=new DateTime(2011,12,31) select a
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询