2010-07-23 9 views
0
인 경우 linq-to-sql이 실패합니다.

간단한 LINQ-to-SQL 쿼리가 작동한다고 생각하는 데 어려움을 겪고 있습니다. 나는 쿼리를 생성 할 수 있으며 생성 된 SQL이 올바른지를 확인할 수 있지만 실행시 "System.NotSupportedException : 로컬 컬렉션을 가진 쿼리가 지원되지 않음"예외가 발생합니다.로컬 목록 변수가

내 쿼리를 단순화했지만 짧은 쿼리가 아래 작동합니다

var query = from asset in context where new[] { 1, 2, 3 }.Contains(asset.code) select asset 

이 쿼리도 작동합니다

var query = from asset in context where new List<int>() { 1, 2, 3 }.Contains(asset.code) select asset 

그러나 아래의 쿼리는 시도가 얻을하려고 할 때 실패합니다 결과 집합 :

List<int> myList = new List<int>(){1, 2, 3}; 
var query = from asset in context where myList.Contains(asset.code) select asset 

누구든지 이런 종류의 문제를 해결 했습니까?

답변

0

이 LINQPad에 나를 위해 잘 작동 : 이와 같이

List<int> myList = new List<int>(){1, 2, 3}; /* Fixed your compiler error here */ 
var query = from asset in assets where myList.Contains(asset.code) select asset; 

, 나는 당신이 실제로 myList를위한 List를 사용하지 않는 가정이 아니라 일반적인 IEnumerable 또는 뭔가 비슷한?

단순화가 오류를 수정하므로 "단순화되지 않은"버전을 붙여 넣으십시오.

+0

오류가 수정되었습니다. LINQ 쿼리 또는 SQL 생성 문제가 아니라 모두 올바르게 작동합니다. 쿼리가 데이터베이스로 전송되고 SQL 및 매개 변수를 생성 할 수있는 경우에도 쿼리에서 로컬 컬렉션을 볼 때 linq-to-sql 논리가 더미를 뱉어내는 경우 예외가 발생합니다. – sipwiz

+0

어떻게 수정 했습니까? –

1

내가 게시 한 내용이 효과적 일 수 있으므로 실제로 깨진 코드를 게시하지 않았다고 믿을 수 있습니다.

MyList 변수가 List<int>이고 IList<int>이 아닌지 확인하십시오. 변수 유형이 IList<int> 인 경우 예외가 발생합니다.

+1

네, 저도 그렇게 생각했습니다. 목록을 전달하면 각 목록 요소를 sql 매개 변수로 전달하고 IN (@ p1, @ p2) 등을 사용합니다. IList가 오류를 발생시킵니다. 다른 예가 있습니다. http://stackoverflow.com/questions/1084339/working-around-linqtosqls-queries-with-local-collections-are-not-supported-exce –

관련 문제