이 오류는 Entity Framework용 데이터베이스 엔진에서 지원하지 않는 메서드가 포함된 LINQ 식을 실행하려고 할 때 발생합니다. 이 경우 오류를 일으키는 메소드는 Double.Parse(string)입니다.
제공된 코드에서 다음 문에서 오류가 발생합니다.
model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : Double.Parse(m.Question1)).Average());
Entity Framework는 LINQ 표현식을 SQL 쿼리로 변환하여 데이터베이스에서 실행합니다. 그러나 Double.Parse 메서드는 표준 SQL 함수가 아니며 SQL로 직접 변환할 수 없습니다.
이 문제를 해결하려면 엔터티에서 사용자 정의 함수를 정의할 수 있습니다. 동등한 SQL 표현식으로 변환될 수 있는 프레임워크 모델입니다. 이 경우 ParseDouble이라는 함수를 정의하겠습니다.
모델에 대한 *.edmx 파일을 열고
<Function Name="ParseDouble" ReturnType="Edm.Double"> <Parameter Name="stringvalue" Type="Edm.String" /> <DefiningExpression> cast(stringvalue as Edm.Double) </DefiningExpression> </Function>
다음으로 ObjectContext 클래스에 대한 부분 클래스를 만들고 여기에 다음 메서드를 추가합니다.
using System.Data.Objects.DataClasses; public partial class YourObjectContext { /// <summary> /// This method exists for use in LINQ queries, /// as a stub that will be converted to a SQL CAST statement. /// </summary> [EdmFunction("YourModel", "ParseDouble")] public static double ParseDouble(string stringvalue) { return Double.Parse(stringvalue); } }
사용자 정의 함수를 정의하고 구현한 후에는 LINQ 표현식을 업데이트하여 다음을 사용할 수 있습니다. it:
model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : YourObjectContext.ParseDouble(m.Question1)).Average());
이제 LINQ 식이 데이터베이스 엔진에서 실행할 수 있는 SQL 쿼리로 성공적으로 변환되어야 합니다.
위 내용은 'LINQ to Entities가 'Double.Parse' 메서드를 인식하지 못합니다.' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!