2009-07-08 5 views
2

C#으로 ASP.net MVC를 사용하고 있습니다. 왜 코드인가요?ASP.NET MVC에서 익명 형식 전달

다음과 같은 오류가 있습니까?

오류 1 암시 System.Linq.IQueryable<eim.Models.Product>에 유형 System.Linq.IQueryable<AnonymousType#1> 을 변환 할 수 없습니다. 명시 적 변환 (당신 이 캐스트를 누락?) select new { s.width, s.height, s.number}System.Linq.IQueryable<AnonymousType#1>을 의미하지만 기능은 IQueryable<Product>를 반환 할 것으로 예상

답변

8

때문에 존재한다. 업데이트]

public IQueryable<Product> ListProducts(string prodcutType) 
{ 

    var results = from p in db.Products 
        join s in db.Stocks 
        on p.ID equals s.IDProduct 
        where p.ptype == prodcutType 
        select p; 
    return results; 
} 

:

또는 어쩌면 당신은 IQueryable<Stock>를 원하는 :에 코드를 변경

public IQueryable<Stock> ListProducts(string prodcutType) 
{ 

    var results = from p in db.Products 
        join s in db.Stocks 
        on p.ID equals s.IDProduct 
        where p.ptype == prodcutType 
        select s; 
    return results; 
} 

만 3 속성을 원하는 경우가 + 높이 + 숫자는 새로운 유형을 만들 폭. 예를 들면 :

public class SomeType { 
    public int Width { get; set; } 
    public int Height { get; set; } 
    public int Number { get; set; } 
} 

public IQueryable<SomeType> ListProducts(string prodcutType) 
{ 

    var results = from p in db.Products 
        join s in db.Stocks 
        on p.ID equals s.IDProduct 
        where p.ptype == prodcutType 
        select new SomeType { 
         Width = s.width, 
         Height = s.height, 
         Number = s.number 
        }; 
    return results; 
} 
1

select new { s.width, s.height, s.number};  

이 테이블 "db.Stocks"만이 세 필드를 선택하며, 이것이 새로운 익명 형식을 생성하여 LINQ 쿼리의 마지막 줄 "결과"에 저장되고 다시 전달되는 것.

"반환 결과; 따라서 이 아니고 IQueryable<Product>이 아닙니다. 이것은 완전히 다른 것입니다 (익명 유형의 IQueryable).

제품을 반환하려면 해당 익명 유형을 "제품"으로 캐스팅하거나 선택한 필드에서 새 제품 클래스를 만들어야합니다.

마크