2017-07-27 67 views
1

enter image description here> System.NotSupportedException:「指定的類型成員‘日期’是在不LINQ指定的類型成員「日期」不LINQ支撐到實體(使用Sqlie)

支撐到實體。只有初始化,實體成員和 實體導航屬性都支持。」

我用EntityFramework6從Sqlie進行查詢,有一些撥錯有關日期時間。

var test = DateTime.Now.Date; 
var maxEntity=_baseService.GetList<TestNoMapping>(o => o.LastChangeTime.Date == test) 
      .OrderByDescending(o => o.SampleId) 
      .FirstOrDefault(); 
public class BaseService 
{ 
    private readonly BaseContext _baseContext = new BaseContext(); 


    public List<T> GetList<T>(Expression<Func<T, bool>> where) where T : class 
    { 
     return _baseContext.Set<T>().Where(where).ToList(); 
    } 

DbFunctions.TruncateTime我有嘗試,但它不工作

+1

你能提供你的代碼與DbFunctions.TruncateTime不工作嗎? –

+0

也許你可以檢查這個帖子https://stackoverflow.com/questions/11597373/the-specified-type-member-date-is-not-supported-in-linq-to-entities-exception –

+0

與https: //stackoverflow.com/questions/33138124/cant-compare-dates-using-sqlite-with-ef6。遺憾的是沒有解決。 –

回答

1

,你可以在這裏做的最好的是由一系列測試更換條件:日期最後午夜至午夜今天:

var minDate = DateTime.Today; 
var maxDate = minDate.AddDays(1); 
var maxEntity = _baseService 
    .GetList<TestNoMapping>(o => o.LastChangeTime >= minDate 
           && o.LastChangeTime < maxDate) 
    .OrderByDescending(o => o.SampleId) 
    .FirstOrDefault(); 

原因是,在比較數據庫值之前轉換數據庫值絕不是一個好主意:i t禁用列上的任何索引。 (見sargable)。

0

您必須使用實體框架的DbFunctions.TruncateTime方法來匹配日期部分作爲LINQ的將無法識別Date財產。

你可以試試下面的代碼嗎?

var test = DateTime.Now; 
var maxEntity=_baseService.GetList<TestNoMapping>(o => DbFunctions.TruncateTime(o.LastChangeTime.Date) == DbFunctions.TruncateTime(test)) 
      .OrderByDescending(o => o.SampleId) 
      .FirstOrDefault(); 
+0

黃凱已經在他的問題中寫道:DbFunctions.TruncateTime我試過,但它不起作用 –

+0

增加了示例代碼。你可以試試這個嗎? –

+0

@peter謝謝,程序拋出異常「SQL邏輯錯誤或缺少數據庫 no such function:TruncateTime」 – HuangKai

0

正如您在例外見:Date不LINQ支持,以實體

您應該使用

o => o.LastChangeTime.Year == test.Year && 
    o.LastChangeTime.Month == test.Month && 
    o.LastChangeTime.Day == test.Day && 

,而不是

o => o.LastChangeTime.Date == test 

編輯

,並更改

var test = DateTime.Now.Date; 

var test = DateTime.Now; 
+0

我會盡量按你說的去做,程序拋出異常System.InvalidCastException:「指定的轉換無效」。 – HuangKai

+0

@黃凱編輯我的問題;看看它。 –

+0

,我上傳了一張關於異常的圖片 – HuangKai

相關問題