flindeberg是正確的,當他說System.Linq.Dynamic分析表達式,你給的C#,而不是SQL。
但是,實體框架定義了類「DbFunctions」,它允許您調用SQL函數作爲Linq查詢的一部分。
DbFunctions.DiffDays是您正在查找的方法。有了這個,你也不需要使用System.Linq.Dynamic。
您的代碼將是這個樣子,我想:
var _list = new vsk_error_log();
using (var entities = new vskdbEntities())
{
_list = entities.vsk_error_log
.Where(entry => DbFunctions.DiffDays(entry.added_date, DateTime.UtcNow) == 0)
.ToList();
}
return _list;
如果你想使用System.Linq的這個功能。動態的,它看起來像這樣:
var _list = new vsk_error_log();
using (var entities = new vskdbEntities())
{
_list = entities.vsk_error_log
.Where("DbFunctions.DiffDays(added_date, DateTime.UtcNow) == 0")
.ToList();
}
return _list;
然而! System.Linq.Dynamic將無法識別類DbFunctions,因此,這不會開箱即用。但是,我們可以「打補丁」,在使用位反映的這個功能,雖然它可以是一個有點難看:
var type = typeof(DynamicQueryable).Assembly.GetType("System.Linq.Dynamic.ExpressionParser");
FieldInfo field = type.GetField("predefinedTypes", BindingFlags.Static | BindingFlags.NonPublic);
Type[] predefinedTypes = (Type[])field.GetValue(null);
Array.Resize(ref predefinedTypes, predefinedTypes.Length + 1);
predefinedTypes[ predefinedTypes.Length - 1 ] = typeof(DbFunctions);
field.SetValue(null, predefinedTypes);
通過運行該代碼,System.Linq.Dynamic現在認識DbFunctions的類型,可以在解析的C#表達式中使用。
無屬性或字段 '日' 在類型存在'vsk_error_log'... – 2014-10-19 13:00:05
爲什麼你在.NET對象上運行SQL代碼? – 2014-10-19 13:01:18
您應該關閉) ''DateDiff(DAY,added_date,getdate())= 0「' – 2014-10-19 13:01:33