2011-11-21 4 views
1

.NET에 익숙하지 않습니다. 나는 아주 간단한 것을하려고 노력하고있다. 내 컨트롤러에서 모델에 대한 검색을 수행하고 제 1 개체가 반환 검색하고 싶은 :.NET MVC 3 컨트롤러에서 검색

var cercueils = from y in db.Cercueils select y; 
cercueils = cercueils.Where(z => z.Type.ToUpper().Contains(dr[13].ToUpper()) 
      || z.AncienType.ToUpper().Contains(dr[13].ToUpper())); 
Cercueil cercueil = cercueils.First(); 

을하지만, 오류 발생으로이 좋지 않다 :

Le type de nœud « ArrayIndex » de l'expression LINQ n'est pas pris en charge dans LINQ to Entities. 

(구글 번역을 : "LINQ 표현식 arrayIndex n의 노드 유형이 LINQ to Entities에서 지원되지 않습니다.")

어떻게 구현할 수 있습니까?

도움 주셔서 감사합니다.

+2

당신이 영어로 프랑스어에서 얻고있는 오류를 번역 할 수 있습니다와 FirstOrDefault를 추천? 그렇게하면 더 쉽게 읽을 수 있습니다. – Rob

+0

질문을 너무 많이 제한 할 수 있습니다. LINQ 질문과 같이 MVC 질문이 많지 않습니다. – iandotkelly

+0

Google 번역 : "LINQ 표현식 arrayIndex n의 노드 유형은 LINQ to Entities에서 지원되지 않습니다." – iandotkelly

답변

3

지연된 실행의 맥락에서 '박사 [13]'... 는 시도 다음 :

01 23,

또한, 나는 보통 이후에 널 검사 :

+0

고마워요. 그것은 매력처럼 작동합니다. –

0

Where() 절 (z => z.Type.ToUpper().Contains(dr[13].ToUpper()) 등)을 SQL 형식 쿼리로 변환 할 수 없으므로 Linq와 엔터티는 앞서 언급 한 오류를 발생시킵니다.

두 가지 방법으로 오류를 수정할 수 있습니다. Linq와 Entities가 Contains() 대신 IndexOf()으로 약간의 성공을 거둘 수 있도록 표현식을 변환하거나 전체 테이블을 다운로드하고 검색을 수행하십시오. 로컬 (분명히, 두 번째 옵션을 방해하는 성능) : 나는 Linq를 실행하는 방법을 알고하지 않습니다 생각

var cercueils = (from y in db.Cercueils select y).ToList(); // load the entire dataset 
cercueils = cercueils.Where(z => z.Type.ToUpper().Contains(dr[13].ToUpper()) 
     || z.AncienType.ToUpper().Contains(dr[13].ToUpper())); 
Cercueil cercueil = cercueils.First(); 
0
 var cercueils = (from y in db.Cercueils 
         where y.blahblah = blahblah 
         select y).FirstOrDefault(); 
관련 문제