프로젝트가 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 구현합니다. 그래서 그들 목표는 다르다. L2Q는 SQL 쿼리로, SQL은 L2QL으로, 메모리 내 IEnumerable 개체는 L2S가 모델링하고 데이터베이스로 작업한다.
이제 L2F를 사용하여 EF 프로젝트에서 L2S 쿼리를 사용할 수있게하려면 먼저 DbContext에서 검색 한 데이터를 IEnumerable로 변환해야합니다.
var a = db.Table.AsEnumerable().Single(d => d.Date == dates[0]);
// or any other methods...