>

조인 쿼리에서 목록을 반환하려고하는데 오류가 발생했습니다.

여기 내 코드가 있습니다 :

public IList<UniStock.Domain.Tables.Inventory> SelectInventoryListByColourSizeGroup(string styleColour, string sizeGroup)
    {
        var db = new UniStockContext();
        IQueryable<Domain.Tables.Inventory> q = (from c in db.Inventories
                   join o in db.SizeGroupSizes
                   on c.Size.Trim() equals o.Description.Trim()
                   where (c.SytleColour == styleColour)
                   && (o.SizeGroup.Description == sizeGroup)
                   select new
                   {
                       c
                   });
        return q;
    }

지금보고있는 오류는 다음과 같습니다.

와이즈 비즈

Cannot implicitly convert type 'System.Linq.IQueryable' to System.Linq.IQueryable'. An explicit conversion exists (are you missing a cast?)`


  • 답변 # 1

    LINQ 표현의이 부분

    select new { c } ;
    
    

    익명유형 객체 목록을 제공합니다. 메소드 서명은 IList<Inventory> 를 반환해야한다고 말합니다. . 예상되는 유형을 반환하지 않기 때문에이 컴파일 시간 오류가 발생합니다.

    당신은 단지 c 여야합니다   db.Inventories 의 별칭입니다.  (필터는 있지만)

    var q =  from c in db.Inventories
                   join o in db.SizeGroupSizes
                      on c.Size.Trim() equals o.Description.Trim()
                     where (c.SytleColour == styleColour)
                       && (o.SizeGroup.Description == sizeGroup)
                   select c;
    return q.ToList();
    
    

    q 변수   IQueryable<Inventory> 가 될 것입니다  그리고 당신이 ToList() 를 호출하면  LINQ 표현식을 실행하고 List<Inventory> 를 얻습니다.  메소드 서명과 일치하는 것을 반환합니다 ( IList<Signature> )

  • 답변 # 2

    문제는 오류에서 알 수 있듯이 메서드가 특정 형식을 예상 할 때 익명 형식을 반환 할 수 없다는 것입니다. 새로운 {} 구문을 사용하면 익명 유형을 작성하게됩니다. 새 {}

    을 제거하십시오.
    public IList<UniStock.Domain.Tables.Inventory> SelectInventoryListByColourSizeGroup(string styleColour, string sizeGroup)
    {
        var db = new UniStockContext();
        IQueryable<Domain.Tables.Inventory> q = (from c in db.Inventories
                   join o in db.SizeGroupSizes
                   on c.Size.Trim() equals o.Description.Trim()
                   where (c.SytleColour == styleColour)
                   && (o.SizeGroup.Description == sizeGroup)
                   select c);
        return q.ToList();
    }
    
    

  • 답변 # 3

    새로운 AnonymousType 에 투영하고 있습니다  이렇게하면 :

    select new { c }
    
    

    원하는 것은 다음과 같이 객체 자체를 선택하는 것입니다 :

    select c
    
    

    그런 다음 .ToList() 를 추가하고 싶을 것입니다  끝까지 쿼리를 실행하고 목록을 채 웁니다.

관련 자료

  • 이전 arrays - C ++에서 문자열을 쪼개 쉼표로 구분하고 외부 라이브러리를 사용하지 않고 strtok을 사용합니까?
  • 다음 Lucene 쿼리를 사용하여 야외 공유 UI에서 특정 컨텐츠 유형 문서 수를 얻는 방법