我有同樣的問題,因爲EF當前的Sql Server數據提供程序忽略將DateTime.Parse轉換爲CAST(varField As DateTime)。
所以要建立一個表達式樹,其可以順利地轉化爲商店的表情,我施加的行爲與人們從謂語遇到下列情況:DateTime.Parse(x.DateField)== DateConstraint
注意,「客戶」對象包含輸入參數以產生一謂詞用於在使用中:EFQuery.Where(謂詞)
if (client.DateOfBirth.HasValue) // can't find a string <-> DateTime conversion syntax with EF support
{
var day = client.DateOfBirth.Value.Day.ToString().PadLeft(2, '0');
var month = client.DateOfBirth.Value.Month.ToString().PadLeft(2, '0');
var year = client.DateOfBirth.Value.Year.ToString();
// very verbose, but apparently there's no EF support for String to DateTime conversion
spec = spec.And(c => SqlFunctions.IsDate(c.DateOfBirth).HasValue && SqlFunctions.IsDate(c.DateOfBirth).Value == 1
&& c.DateOfBirth.StartsWith(day)
&& month == (c.DateOfBirth.Contains("-") || c.DateOfBirth.Contains("/")
? c.DateOfBirth.Substring(c.DateOfBirth.Contains("-") ? c.DateOfBirth.IndexOf("-") + 1 : c.DateOfBirth.Contains("/")
? c.DateOfBirth.IndexOf("/") + 1 : 0, 2) : "f")
&& c.DateOfBirth.EndsWith(year));
}
正如可以看到,在上述執行字符串的日,月相匹配,和年份的組成部分,並預計將有DD/MM/YYYY代表(Aussie Aussie Aussie!)。它可以很容易地修改爲使用不同的日期表示和/或包括Time組件的約束。
你有什麼樣的錯誤,如果有的話? – BlackICE 2010-03-31 19:41:27
基本上沿着「Linq實體不支持(Convert.ToDateTime(String))...」 – 2010-03-31 19:48:55