문제

나는 다음과 같은 Certaion Query 표현식을 지원하지 않는 엔티티에 대한 LINQ에 대한 예외를 계속 받고 있습니다.

MyDataContext db = new MyDataContext()
Brand = db.Brands.First(b => b.BrandId == Int32.Parse(brandIdString))

나는 문자열을 따라 엔티티 스토어에 구문 분석을 전달하려고하지 않고, 그 문자열을 비교를 위해 정수로 구문 분석하고 싶습니다. 이 작업을 수행하기위한 유일한 작업입니까, 아니면 내가 여기서 완전히 벗어 났습니까?

도움이 되었습니까?

해결책

최선의 선택 (적어도 당신이 준 예제의 경우)은 LINQ 문의 작업을 꺼내는 것입니다.

Int32 brandId = Int32.Parse(brandIdString)
MyDataContext db = new MyDataContext()
Brand = db.Brands.First(b => b.BrandId == brandId )

설명:

LINQ를 사용하는 경우 데이터베이스 쿼리에 최대한 많은 작업을 오프로드하는 방법을 알아 내려고합니다. 그렇게하려면 실제로 다양한 람다 표현에서하는 모든 일의 표현 트리를 만듭니다. 그런 다음 쿼리를 실행하려면 요청한 작업을 수행하는 데 가장 적합한 SQL 문이 결정됩니다. 이를 통해 매우 멋진 최적화를 수행 할 수 있습니다. 그러나 무언가를 SQL 문으로 변환하는 방법을 모른다면 쿼리를 실행하려고 할 때 화가 나게됩니다.

다른 팁

이것을 사용할 수 있습니까?

MyDataContext db = new MyDataContext();
Brand b = db.Brands.Where(b => b.BrandId == Int32.Parse(brandIdString)).First();

대체 솔루션 (Lambdas를 사용하지 않음)은 다음과 같습니다.

MyDataContext db = new MyDataContext();

Brand b = (from Brand b in db.Brands
           where b.BrandId == Int32.Parse(brandIdString)
           select b).First();

(또한, 당신은 누락되었습니다 ; 각 코드 라인의 끝에서, 당신은 당신이 쿼리에서 얻는 모든 것에 대한 변수 이름을 지정하지 않았지만, 나는 그것들이 여기에서만 오타라고 생각합니다 ...)

데이터베이스는 문자열 구문 분석 요구를 제공하기 위해 존재하지 않습니다. 필요한 파싱을 수행하기 전에 수행하십시오.

예. 이것은 짜증납니다. 쿼리 밖에서 데이터를 구문 분석하거나 정규화해야한다는 것을 알게되었습니다. 그런 다음 결과를 전달합니다. 쿼리의 한계에서 날짜 서식을 수행하려고 할 때이 문제를 해결했습니다. 결국 쿼리에서 문자열 변수로 이동 한 다음 이미 적용된 적절한 형식으로 변수로 전달되었습니다.

절름발이 - 엔티티 프레임 워크는 갈 길이 멀다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top