2009-09-07 46 views
11

我正在使用System.Linq.Dynamic在.NET MVC 1.0中調用ajax調用中的子句。System.Linq.Dynamic和DateTime

它適用於字符串,int等,但不適用於DateTime,我得到的異常無法比較String到DateTime。非常簡單的測試代碼是

items = items.Where(string.Format(@「{0}> {1} {2} {1}」,searchField,delimiter,searchString));

其中,searchField將爲例如start_date,數據類型爲DateTime,分隔符爲「(無所謂)」,並且searchString將爲2009年1月1日(2009/01/01)從LinqToSql一個IQueryable。

是否有一個動態的指定數據類型,其中的一種方式,或是否有更好的方法。它是目前已經在使用一些反映制定出需要什麼類型的分隔符。

+1

當一個問題有一個upvotes的答案的問題,但它有0 upvotes的問題本身總是混淆了我的地獄。瘸。好問題,我來到這裏是因爲我需要同樣的東西! Upvote給你,好先生! – viggity 2011-10-25 16:32:58

回答

18

我認爲您可以將searchString轉換爲DateTime並將其作爲參數傳遞給動態方法本身。

itmes = items.Where(string.Format("{0} > @0", searchField), 
        DateTime.Parse(searchString)); 
+1

謝謝 items = items.Where(string.Format(「{0}> @ 0」,searchField),new DateTime(2001,1,15)); 很棒 – 2009-09-07 16:35:04

+0

太棒了,謝謝! – 2017-03-21 13:29:16

1

如果整個lambda是動態創建的(我們將使用equals而不是大於)並且類型不知道該怎麼辦?在這種情況下,你不能在where參數中使用DateTime.Parse。如果您嘗試傳入DateTime對象,Dynamic LINQ會將其解釋爲int32類型。你可能通過首先轉換DateTime的ticks或毫秒並比較它嗎?

3

我用Convert.ToDateTime來解決這個問題,因爲我在做類似的東西,以Kappasims

items = items.Where(string.Format("{0} > Convert.ToDateTime(\"{1}\")", searchField, searchValue); 
+4

我已經看到了圍繞一堆的建議,但它不適用於我 - 與'LINQ to Entities無法識別該方法'失敗'System.DateTime ToDateTime(System.String)'' – 2014-06-02 05:55:40

+0

我有同樣的問題有了這個建議。在哪個sql server中工作? – 2015-10-09 13:59:34

3

如果你想只用Where([string])格式要做到這一點,而不是通過其他PARAMATERS,你可以使用日期格式爲Date(yyyy, mm, dd)。所以,我能夠做

items.Where("DateAdded > Date(2013, 06, 18)") 

有是概括的分析和有效使用完整的規範here得到這個工作。

6
yourlist.Where("PostDate > DateTime(2013, 07, 24)");