LINQ to Entities의 "ToString() 메서드가 인식되지 않음" 오류 문제 해결
LINQ to Entities로 작업할 때 "LINQ to Entities가 'System.String ToString()' 메서드를 인식하지 못합니다."라는 오류가 발생할 수 있습니다. 이는 LINQ to Entities가 ToString()
메서드를 데이터베이스 호환 쿼리로 변환하는 데 어려움을 겪기 때문에 발생합니다. 해결 방법은 LINQ 쿼리ToString()
내에서
다음은 이 문제를 해결하는 수정된 코드 예제입니다.
<code class="language-csharp">using (var context = new Context()) { // ... foreach (var item in collection) { string strItem = item.Key.ToString(); // Assign ToString() result to a variable IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p; foreach (var page in pages) { DataManager.AddPageToDocument(page, item.Value); } } Console.WriteLine("Done!"); Console.Read(); }</code>
item.Key.ToString()
의 결과를 strItem
변수에 미리 할당함으로써 번역 문제를 우회합니다. where
절은 이제 LINQ to Entities 공급자가 효과적으로 처리할 수 있는 문자열 리터럴을 사용합니다.
대체 접근 방식: SqlFunction 활용
Entity Framework는 데이터베이스 관련 기능을 제공하는 SqlFunctions
도우미 클래스를 제공합니다. 이는 이와 같은 경우에 보다 우아한 솔루션을 제공합니다. SqlFunctions.StringConvert
메서드를 사용하면 데이터베이스 쿼리 자체 내에서 변환이 가능합니다.
이 솔루션을 구현하는 방법은 다음과 같습니다.
<code class="language-csharp">using (var context = new Context()) { // ... foreach (var item in collection) { IQueryable<entity> pages = from p in context.pages where SqlFunctions.StringConvert((double?)p.Serial) == item.Key.ToString() //Note the cast to (double?) if needed select p; foreach (var page in pages) { DataManager.AddPageToDocument(page, item.Value); } } Console.WriteLine("Done!"); Console.Read(); }</code>
이 접근 방식은 데이터베이스 쿼리 내에서 문자열 변환을 유지하여 효율성을 높이고 번역 오류를 방지합니다. SqlFunctions.StringConvert
에서는 종종 데이터베이스 필드를 적절한 유형으로 캐스팅해야 합니다(예: (double?)p.Serial
가 숫자 유형인 경우 p.Serial
). 데이터베이스 스키마와 일치하도록 필요에 따라 캐스트를 조정하십시오. 이 방법은 일반적으로 더 나은 성능과 깔끔한 코드를 위해 선호됩니다.
위 내용은 'LINQ to Entities가 'System.String ToString()' 메서드를 인식하지 못합니다.' 예외를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!