一個項目剛剛從linq-to-sql切換到linq-to-entities,現在我收到了錯誤
The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities.
對於這一行:
var a = db.Table.Single(d => d.Date == dates[0]);
(在這種特殊情況下修復它很容易,如在
var firstDate = dates[0];
var a = db.Table.Single(d => d.Date == firstDate);
)
但為什麼這在linq-to-sql中有效,但在linq-to-entities中卻沒有用?他們是否使linq-to-entities比linq-to-sql更糟?我錯過了什麼?
那是因為L2E只是試圖將您的查詢轉換為sql命令。因此,任何其他的東西(像.ToString()這樣的方法,以及其他無法轉換為SQL的東西)都會導致異常。
但是,像對象linq這樣的L2S實現了IEnumerable。因此,它們的目標是不同的:L2E將linq查詢轉換為sql命令,L2O用於處理內存中的IEnumerable對象,L2S用於建模和使用數據庫。
現在,如果希望能夠在EF項目中使用L2S查詢(使用L2E),則應首先將從DbContext檢索到的數據轉換為IEnumerable:
var a = db.Table.AsEnumerable().Single(d => d.Date == dates[0]);
// or any other methods...