>

BaseDocument TextDocument ExcelDocument  그리고 WordDocument  클래스. 그들은 BaseDocument 에서 물려 받았습니다 . 각 수업에 대한 컬렉션이 있습니다. BaseDocuments 를 말할 수 있습니다  모음은 일부 장소의 일부 자식 엔터티 모음에서 가치를 얻습니다. 컬렉션 유형이 다르며 일부는 목록이며 다른 하나는 IQuerable 입니다.     그리고 다른 특정 유형. BaseDocuments  컬렉션은 IQuerable 입니다  일부 하위 엔티티 콜렉션에서 유형을 가져오고 값을 가져옵니다. 다음과 같습니다 :

using (Context context = new Context())
 {
    var words = context.GetEntities<BaseDocument>().Where(e => e.Name.StartsWith("Word")).ToList(); // type of collection is list
    var excels = context.GetEntities<BaseDocument>().Where(e => e.Name.StartsWith("Excel"));
    var texts = context.GetEntities<BaseDocument>().Where(e => e.Name.StartsWith("Text"));
    var wordsAsQuery = words.AsQueryable();
    baseDocuments = wordsAsQuery.Concat(excels).Concat(texts);
 }

보시다시피 Concat 방법을 사용하고 있습니다. 하지만 내가 var instaces = baseDocuments.ToList(); 할 때  예외가 발생합니다 :

System.InvalidOperationException: 'This method supports the LINQ to Entities infrastructure and is not intended to be used directly from your code.'

연구를 해본 결과 코드를 수정 한 후에는 다음과 같은 예외가 발생합니다.

LINQ error DbUnionAllExpression requires arguments with compatible collection ResultTypes.

모든 자식 컬렉션을 ToList 할 수는 있지만 이해가되지 않으며 성능 문제가 있습니다.

다른 유형의 컬렉션을 IQuerable 컬렉션에 연결하려면 어떻게해야합니까? 가능합니까?

모델에 대한 자세한 내용은 마지막 질문 인 엔티티 인스턴스로드에 1 초 이상 소요


  • 답변 # 1

    왜 처음 ToList 입니까? Word 문서를 작성하고 AsQueryable 를 수행  그들에? LINQ가 데이터베이스 구조에 대한 모든 것을 잊고 word 를 처리하게합니다.  메모리 내 컬렉션. 그런 다음 Concat 에 알려주십시오.  실제 쿼리를 사용하면 지정한 오류가 발생합니다. 왜 안돼 :

    using (Context context = new Context())
    {
       var words = context.GetEntities<BaseDocument>().Where(e => e.Name.StartsWith("Word"));
       var excels = context.GetEntities<BaseDocument>().Where(e => e.Name.StartsWith("Excel"));
       var texts = context.GetEntities<BaseDocument>().Where(e => e.Name.StartsWith("Text"));
       baseDocuments = words.Concat(excels).Concat(texts);
    }
    
    

  • 이전 javascript - require-all을 사용하여 디렉토리 및 서브 디렉토리에서 파일을 재귀 적으로로드
  • 다음 hybris 서버 시작을 도와주세요