我有以下查詢:如何從LINQ2SQL查詢更好的SQL
var data = from d in dc.GAMEs
where (d.GAMEDATE + d.GAMETIME.Value.TimeOfDay) >= DateTime.Now select d;
這會產生一些horendous尋找SQL,看起來像這樣:
SELECT {...} WHERE DATEADD(ms, ((CONVERT(BigInt,((CONVERT(BigInt,DATEPART(HOUR, [t0].[GAMETIME]))) * 36000000000) + ((CONVERT(BigInt,DATEPART(MINUTE, [t0].[GAMETIME]))) * 600000000) + ((CONVERT(BigInt,DATEPART(SECOND, [t0].[GAMETIME]))) * 10000000) + ((CONVERT(BigInt,DATEPART(MILLISECOND, [t0].[GAMETIME]))) * 10000)))/10000) % 86400000, CONVERT(DateTime,DATEADD(day, (CONVERT(BigInt,((CONVERT(BigInt,DATEPART(HOUR, [t0].[GAMETIME]))) * 36000000000) + ((CONVERT(BigInt,DATEPART(MINUTE, [t0].[GAMETIME]))) * 600000000) + ((CONVERT(BigInt,DATEPART(SECOND, [t0].[GAMETIME]))) * 10000000) + ((CONVERT(BigInt,DATEPART(MILLISECOND, [t0].[GAMETIME]))) * 10000)))/864000000000, [t0].[GAMEDATE]))) >= @p0
,這是什麼巨大的原因SQL的數量?有沒有更好的方法來處理它?
編輯:
我無法控制架構。它就是這樣,我必須處理它。
我很想,但不能。它會打破我們沒有來源的現有應用程序。 – 2010-07-15 21:37:58
@Mystere Man:您是否考慮過將datetime2添加爲計算列?如果你堅持下來,你甚至可以索引它。在不更改任何現有列的情況下添加額外的列有相當好的機會不會破壞現有的應用程序(儘管您需要徹底測試它)。 http://msdn.microsoft.com/en-us/library/ms191250.aspx – 2010-07-15 21:46:13
我的假設是,由於生成的SQL中的所有計算,它會明顯變慢。不,我沒有測量這個,Knuth引用到一邊,我更喜歡清理sql。 – 2010-07-15 21:49:53