> 백엔드 개발 > C++ > 내 LINQ 쿼리가 '… 유형의 상수 값을 생성할 수 없습니다.'라는 메시지와 함께 실패하는 이유는 무엇입니까?

내 LINQ 쿼리가 '… 유형의 상수 값을 생성할 수 없습니다.'라는 메시지와 함께 실패하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-17 23:21:11
원래의
113명이 탐색했습니다.

Why Does My LINQ Query Fail with

LINQ 쿼리 오류: "API.Models.PersonProtocol 유형의 상수 값을 생성할 수 없습니다. 이 컨텍스트에서는 기본 유형 또는 열거 유형만 지원됩니다."

이 문서에서는 SELECT 절에서 API.Models.PersonProtocol 유형의 상수 값을 생성하려고 시도하여 발생한 LINQ 쿼리 오류를 해결합니다. 이 컨텍스트에서는 기본 유형 또는 열거 유형만 상수로 허용됩니다.

문제는 다음 코드 줄에 있습니다.

<code class="language-csharp">personProtocol = (ICollection<personprotocol>) ppCombined
    .Where(a => a.personId == x.personId)
    .Select( b => new PersonProtocol()
     {
         personProtocolId = b.personProtocolId,
         activateDt = b.activateDt,
         personId = b.personId
     })</code>
로그인 후 복사

여기서 ppCombined는 메모리에 있는 PersonProtocolType 객체들의 집합입니다. 데이터베이스에서 검색된 데이터와 직접 연결할 수 없습니다.

솔루션

이 오류를 해결하려면 ppCombined의 필터링 및 매핑 작업을 SELECT 절 외부로 이동해야 합니다. 수정된 코드는 다음과 같습니다.

<code class="language-csharp">var persons = db.Favorites
    .Where(f => f.userId == userId)
    .Join(db.Person, f => f.personId, p => p.personId, (f, p) =>
        new // 匿名对象
        {
            personId = p.personId,
            addressId = p.addressId,   
            favoriteId = f.favoriteId,
        })
    .AsEnumerable() // 数据库查询在此结束,其余部分是内存中的查询
    .Select(x =>
        new PersonDTO
        {
            personId = x.personId,
            addressId = x.addressId,   
            favoriteId = x.favoriteId,
            personProtocol = ppCombined
                .Where(p => p.personId == x.personId)
                .Select(p => new PersonProtocol
                {
                    personProtocolId = p.personProtocolId,
                    activateDt = p.activateDt,
                    personId = p.personId
                })
                .ToList()
        });</code>
로그인 후 복사

이 수정된 쿼리에서는 ppCombined 컬렉션이 먼저 메모리에서 필터링 및 매핑되어 필요한 PersonProtocol 개체를 가져옵니다. 그런 다음 결과는 PersonDTO 객체의 personProtocol 속성에 할당됩니다. ppCombined 이후에 AsEnumerable() 처리를 이동하여 데이터베이스 쿼리에서 메모리 내 컬렉션 사용을 방지합니다. AsEnumerable() 데이터베이스 쿼리 결과를 메모리 컬렉션으로 변환하고 이후의 모든 작업은 메모리에서 수행되므로 원래의 오류가 해결됩니다.

위 내용은 내 LINQ 쿼리가 '… 유형의 상수 값을 생성할 수 없습니다.'라는 메시지와 함께 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿