利用LinqPad將Datetime欄位資料Linq語法轉換odata語法注意事項

  • 1475
  • 0
  • 2014-09-27

摘要:Odata
摘要:LinQ
摘要:SQL

當你用linqpad設定資料來源Odata Uri後,就可以用做強大的LINQ語法查詢並且轉換sql odata Lambda
But~!

小弟最近在測試過程中發現,
ex.DB有個table 叫TB裡面有個欄位叫做DT型別是datetime 存入2014-08-27 一筆資料
當你下sql的時候你可以這樣下

 


select dt from tb where 1=1 and dt='2014-08-27'
select dt from tb where 1=1 and dt='2014/08/27'
但是不能下
select dt from tb where 1=1 and dt='2014,08,27'

你來到linq的世界 你想把sql轉換成linq你會這樣下


from n in {資料來源DB} 
where 1=1 and n.dt='2014-08-27' 
select n

這樣會執行嗎?
答案是{ X }

必須寫成


from n in {資料來源DB}
where 1==1 && n.dt==new datetime(2014,08,27)
select n

現在換一個場景,你無法登入DB你的資料來源是odata
odata一樣是將TB資料表轉成Odata 一樣有欄位DT裡面也有幾筆datetime型別的資料

你看過的文章,你知道linqpad可以將linq語法轉成odata的query get字串

所以你先下了一個簡單的linq看看資料
 


from n in {資料來源odata} where 1==1 select n

一看!沒錯果然有兩筆欄位資料2015/08/27,2012/08/27 所以你改變了語法 
你想要練習一下linq to odata
所以你想知道看到dt欄位==2015/08/27有沒有資料(os:廢話!用看的也知道有!)


from n in {odata} 
where 1==1 && n.dt ==new datetime(2015/08/27)
select n
結果一看結果,WTF 0 item 改成

from n in {odata} 
where 1==1 && n.dt >=new datetime(2015/08/27)
select n

WTF怎麼資料又全出來了

所以你拜託管理DB的同仁開了TABLE看欄位資料,原來!
欄位資料是2015-08-27與2012-08-27

由於你看過上面的文章你知道要改寫成


from n in {odata} 
where 1==1 && n.dt ==new datetime(2015,08,27)
select n


至於怎麼會這樣!?我也不知道ˊ_>ˋ

/* 姑且稱之為魔法吧 */
╮(′~‵〞)╭