2009-05-17 6 views
1

다음과 같은 상황에서 함수의 returntype을 정의하는 방법을 알고 싶습니다.LINQ가있는 함수에서 반환 형식을 정의하는 방법?

나는 제품을 가지고 있으며 한 번에 모든 정보 또는 제품 하나를 반환하고있었습니다.

내 함수에서 볼 수 있듯이 아래에 정의되어 있습니다.

public static Products GetProducts(int pid) 
{ 
    var pro = from p in context.Products 
       select p; 

    if(pid > 0) 
     pro = pro.where(p => p.ProductID ==pid) 

    return (Products)p; 
} 

문제는 주조 오류입니다. 당신이 볼 수 있듯이 내가 얻고 자하는 것은 내 매개 변수에 기초하여 결과 집합을 얻는다. 어떤 시간은 제품 번들 & 한 번 제품. 나는 linq에 새로운 어떤 도움을 주시면 감사하겠습니다.

오류가 유형의 객체를 전송할 수 없음 는 'System.Data.Objects.ObjectQuery`1는 [TTDCore.Theatres]'TTDCore.Theatres '

IM을 결합 할 때의 gridview에 입력 할 수있다 . 여기 유형 Product의 객체의 반복 가능한 (또는 열거)를 나타냅니다 당신은 IEnumerable<Product>을 반환하려면 코드

Products p = Class1.GetProducts(0); 

GridView1.DataSource = p; 
GridView1.DataBind(); 

답변

6

이다. LINQ는 일반적으로이 제네릭 형식을 기반으로하므로 일반적으로 쿼리 결과로 반환하려고합니다.

나는 당신의 코드는 다음과 같은 것을하게 고정되어야한다 생각 :

public static IEnumerable<Products> GetProducts(int pid) 
{ 
    var pro = from p in context.Products 
       select p; 

    if(pid > 0) 
     pro = pro.Where(p => p.ProductID == pid) 

    return pro; 
} 

당신이 당신의 질문에 다른 것을 의미 알려줘. 나는 정확하게 당신이 무엇을 찾고 있는지 확실하지 않았습니다.

+0

네 이것이 정확히 내가 찾고있는 것입니다. 그냥 빠른 하나 내가 이것을 시도 & gridview에서 잘 작동합니다. 단 하나의 기록을 반환하는 경우. 이런 식으로하는 게 옳은 길이야? 제품 p = (제품) Class1.GetProducts (1) .FirstOrDefault(); Response.Write (p.ProductName); 그 작품은 단지 wana가 올바른 방법인지 알고 있습니다. ur 빠른 응답을위한 고맙습니다. – Andy

+0

아, 좋아. :) 그리고 네, 단일 레코드를 반환하는 제안 된 방법은 잘 작동합니다. 상황에 따라 First/FirstOrDefault 또는 Single/SingleOrDefault 확장 메서드가 적합합니다. 후자 (Single)는 하나 이상의 match가 * more * 인 경우 예외를 던지지만, 전자 (First)는 처음으로 반환하고 열거를 중지합니다. 'OrDefault' 비트는 예외를 던지는 것과는 대조적으로 일치하는 것이 없으면 기본값 (참조 유형의 경우 null)을 반환하는 것을 의미합니다. – Noldorin

+0

쿼리는 하나의 표현식으로도 표현 될 수 있습니다. 컨텍스트의 p에서. p.ProductID == pid && pid> 0 select p –

0

저는 Linq 쿼리와 람다를 사용하고 있습니다. List <Product> (또는 IEnumerable <Product>)으로 함수를 정의한 다음 where 문에 .ToList()를 추가하는 것이 좋습니다. 제품 유형이 일종의 컬렉션이라고 가정합니다.

+0

제품은 테이블입니다. 내 SQL Server 데이터베이스 = Entity Framework의 엔터티 클래스. 이 시나리오에서 가장 좋은 방법은 무엇이라고 생각하십니까? – Andy

+0

글쎄, 제품의 * 반환 유형을 * 제품으로 정의 할 필요가 없다고 생각합니다. 쿼리에서 제품을 지정하는 것으로 충분합니다. 따라서 목표를 올바르게 이해하면 반환 유형은 IEnumerable 또는 List 여야합니다.GridView에 바인딩됩니다. –

관련 문제