1

대다수의 행에 숫자로 된 값이있는 형식의 열이있는 테이블이 있습니다. 즉, 각 문자열에는 숫자 0 만 포함됩니다 MySQL은 9MySQL 어댑터를 사용하여 LINQ to Entity Framework에서 문자열을 long으로 변환

+------+ 
| n | 
+------+ 
| 123 | 
| 234 | 
| BLAH | -- This row is an exception to the rule. 
| 456 | 
| 789 | 
+------+

통해이 작동 : SELECT * FROM t WHERE n >= 200 AND n <= 500;
n 234의 값을 갖는 경우와 같은 행 위의 데이터 (456)를 반환.

LINQ를 Entity Framework와 함께 사용하려면 동일한 작업을 수행하고 싶습니다. 참고

var results = from n in context.t 
       let n_asLong = long.Parse(n) // ...I know, see note below... 
       where (n != null && n_asLong >= lowVal && n_asLong <= hiVal) 
       select n_asLong; 

    : 예, 나는 그것이 잘못된 숫자에 도달 할 때 long.Parse()가 예외를 던질 것으로 알고 있어요. 현재 샘플 데이터에는 합법적으로 구문 분석 할 수있는 문자열 만 들어 있습니다. 나는 완전하고 포괄적 인 대답을 기대하기 위해 숫자가 아닌 항목을 포함 시켰습니다. LINQ 부호화에 관한 예외

실행 코드 결과 : 엔티티
LINQ 메소드 'INT64 파싱 (시스템 String) 메소드를 인식하지 않고,이 방법은 저장 식으로 변환 될 수 없다.

나는 SQL로 변환하려고하는 이유를 알고 있습니다.

실제로 MS-SQL을 사용한 실험을 수행하여 잘못된 데이터 ('BLAH'와 같은 숫자가 아닌 값의 경우 0을 반환 함)를 인식하는 사용자 지정 문자열 - 긴 함수를 내 보내야했습니다. LINQ to SQL과 함께, 비록 내가 원하는 것보다 훨씬 더 복잡한 해결 방법 이었지만.

하지만, 나는 MySQL 솔루션에 갇혀 있습니다. 따라서 위의 공급 업체별 해킹은 작동하지 않습니다.

은 문자열을 값으로 처리하고 (원시 SQL에서 허용하는 것처럼) LINQ to Entity Framework에서 문자열을 처리하는 방법이 될 수는 없습니다.

일부 데이터베이스/C#/.NET/LINQ 전문가로부터 좋은 접근 방법이 있습니까?

다른 경우가 없다면 부끄러운 실행 원시 SQL 직접 솔루션을 사용하고 싶습니다.

답변

1

종료 된 펀팅.

Entity Framework는 객체만으로 동작한다고 생각하며 강력한 형식 검사를 수행하는 동시에 SQL 내에서 비교할 목적으로 형식을 변환하는 메커니즘은 필요하지 않습니다.

놀라 울 정도로 CONVERT("1234", UNSIGNED) (MySQL에서 제공)은 인코딩 할 수 없으므로 Int64.Parse()의 솔루션은 훨씬 적습니다.

MySqlConnection/MySqlCommand/MySqlDataReader을 통해 원시 SQL에 액세스했습니다.

3

"변환"을 사용할 수 있으며 공급자가이를 변환 할 수 있습니다.

var results = from n in context.t 
       let n_asLong = Convert.ToInt64(n) // -- Here is the magic 
       where (n != null && n_asLong >= lowVal && n_asLong <= hiVal) 
       select n_asLong; 

+1

좋은 생각 (적어도 그것은 나를 SQL 서버 Express 및 LINQPad을 사용하여 근무), 그러나 그것은 작동하지 않았다. LINQ to Entities를 사용하면 NotSupportedException이 발생합니다. LINQ to Entities가 'Int64 ToInt64 (System.String)'메서드를 인식하지 못하고이 메서드를 저장소 식으로 변환 할 수 없습니다. 이 버전의 Entity Frameworks는 뇌가 죽었다고 생각합니다. –

+0

감사합니다, 당신의 대답은 Linq에서 SQL과 비슷한 문제로 나를 도왔습니다 ... –

관련 문제