2009-10-20 81 views
1

嗨,我正在嘗試創建一個Expression<Func<T, bool>>,其中字符串屬性被轉換/轉換爲DateTimeOffset,以便可以對其執行DateTimeOffset操作。在表達式中解析字符串爲DateTimeOffset <Func <T, bool>>

我們使用Linq2SQL作爲我們的數據提供者,它支持將字符串轉換爲DateTimeOffset的SQL等價物。理想情況下,我希望表達式直接在IQueryable數據源中進行評估,而不是作爲IEnumerable在內存中進行評估。

請參閱以下的是我曾嘗試遠的例子:

public class MyClass 
{ 
    public string MyValue; 
} 

Expression<Func<MyClass, bool>> filter = mc => DateTimeOffset.Parse(mc.MyValue) > new DateTimeOffset(2007,1,1); 

不幸的是過濾器的這個定義在內存計算導致。

+0

我很困惑。物理表列是'char'還是'datetime'? – 2009-10-20 20:09:10

+0

在SQL中,列是一個字符串(我相信nvarchar) – NoizWaves 2009-10-20 22:44:26

回答

1

由於底層物理表列是nvarchar而不是datetime,所以我覺得你運氣不好。 LINQ2SQL提供程序知道它是nvarchar數據,因此不會生成處理它的原生SQL表達式作爲datetime值。

說實話,我甚至無法看到用原始手工製作的SqlCommand物體做到這一點的安全方法。你真的應該將數據讀入內存中作爲String,然後將其轉換爲DateTimeOffset,然後手動將其過濾到內存中。如果您希望對此列進行本地SQL篩選,則需要更改表格模式。

相關問題