2013-08-11 2 views
3

다음 코드 블록에서 오류가 발생합니다.Entity Framework ToString 메서드

LINQ to Entities는 'System.String ToString()'메서드를 인식하지 못하고이 메서드를 저장소 식으로 변환 할 수 없습니다.

db.tbOnIgmHawbDetails 
    .Where(s => !db.tbImpoExaminations.Any(x => x.Hawb.ToString() == s.Hawb) && s.AwbNo == p) 
    .Select(s => s.Hawb).ToList(); 

어떤 제안 ? 왜 이런 일이 일어나고 해결책은 무엇입니까?

+0

가능한 중복 방법을 인식하지 못합니다 그러나하지 않을 경우하여 쿼리를 수행 할 구문은 LINQ - 투는-객체 'System.String ToString()'메서드를 호출하고이 메서드는 저장소 식으로 변환 할 수 없습니다.] (http://stackoverflow.com/questions/5899683/linq-to-entities-does-not-recognize-the-method- system-string-tostring-method) –

+0

'x.hawb == s.hawb'가 아닌 변수의 문자열 표현을 왜 비교하고 있습니까? –

+0

x.hawb는 long 타입이고 x.hawb는 문자열 타입이므로 .... –

답변

8

당신은 decimal 변환 사용 ... SqlFunctions.StringConvert로 시도 할 수 :

+3

ToString()은 EF 6.1에서 지원됩니다. http://blogs.msdn.com/b/adonet/archive/2014/03/17/ef6-1-0-rtm-available.aspx –

1

s.Hawb이 이미 문자열 유형 인 경우 (오류 메시지에 나와있는 것처럼) 쿼리에서 .ToString() 부분을 제거하십시오.

이유는 LINQ2SQL에서 SQL로 변환 할 수있는 언어 구문 만 사용할 수 있기 때문입니다. 예를 들어 C# 식에서 RegEx를 사용하려고하면 SQL에 RegEx에 해당하는 구문이 없으므로 LINQ는 쿼리를 변환하고 실행할 수 없습니다.

+0

s는 linq 질의의 일부입니다. –

+1

-1 - 어떻게's.Hawb.ToString()'*를 호출 할 수 있습니까? *'s'가 람다 쿼리의 일부일 때 LINQ 쿼리의 *? –

+0

아 나는 그것을 놓쳤다. 나는 나의 대답을 업데이트했다. – dotNET

0

쉽게하기 전에 .AsEnumerable()를 추가

SqlFunctions.StringConvert((decimal)p.x.Hawb).TrimLeft() == ... 

(SQL의 STR 기능은 바로 숫자를 정렬되므로 TrimLeft이 필요를) .ToString() 및 L2E가 지원하지 않는 방법 :

var asen = db.tbOnIgmHawbDetails.AsEnumerable(); 

var result = asen.Where(s => !asen.Any(x => x.Hawb.ToString() == s.Hawb) && s.AwbNo == p) 
    .Select(s => s.Hawb).ToList(); 

그게 효과가있다.

var result = from a in asen 
      where ... 
      select ...; 
+0

'AsEnumerable)'다음 호출이 쿼리를 실행하게합니까?그것은 데이터베이스를 사용하는 시점을 패배시키는 전체 테이블을 끌어 내릴 것입니다 ... –

+0

@StevenHunt 물론 그렇습니다! L2E는 L2E 명령을 원시 SQL로만 변환하기 때문에'.ToString()'이나 다른 함수를 인식하지 못합니다 ... db에서 원하는 레코드를 가져 와서 메모리 내 목록에 그러한 함수를 수행해야합니다. 그 목표를 달성하기위한 몇 가지 방법 중 하나 ... – AminSaghi