2011-08-17 4 views
-2

나는이 테이블오류가 "supportedException 사용자 코드에 의해 처리되지 않은 아니었다"있어

나는 콤보는 categoryCombobox로 명명하고 그리드보기는 데이터 그리드를 채우기 위해 노력하고 productgridview

로 이름

product(table name) 
     product_id 
     product_name 
     product_image 
     product_price 
     product_description 
     category_id 

    category(table name) 
     category_id 
     category_name 
     category_description 

.... 이런 콤보 ..의 선택에 따라

 private viod form_load(object sender, EventArgs e) 
     { 
     var products = from prods in abc.products 
         select new 
         { 
          prods.product_Id, 
          productname = prods.product_Name, 
          productimage = prods.product_Image, 
          productprice = prods.product_Price, 
          productdescription = prods.product_Description 

         }; 
     productbindingsource.DataSource = products; 
     productgridview.DataSource = productbindingsource; 
     productgridview.Columns[0].Visible = false; 
     } 
     private void categoryCombobox_SelectedIndexChanged(object sender, EventArgs e) 
     { 

      // is this query correct 
      var categoryid = from productcategories in abc.categories 
         where productcategories.category_Name.Equals(categoryCombobox.Text) 
         select productcategories.category_Id; 

      var produc = from pros in abc.products 
         where pros.Category_Id.Equals(categoryid) 
         select new 
         { 
          productname = pros.product_Name, 
          productimage = pros.product_Image, 
          productprice = pros.product_Price, 
          productdescription = pros.product_Description         

         }; 
     productbindingsource.DataSource = produc; 
     productgridview.DataSource = productbindingsource; 
     productgridview.Columns[0].Visible = false; 

    }  

는 ......

이런있어 오류

오류 :이 줄에서 productbindingsource.DataSource = produc;

하지 supportedException 형 'System.Linq.IQueryable`1'의 요소를 비교할 수 없습니다 사용자 코드
에 의해 unhaldled했다. 기본 형식 (예 : Int32, String 및 Guid) 및 엔터티 형식 만 지원됩니다.

+0

abc.products의 구성처럼 도움이 될만한 정보가 더 필요합니다. –

+1

오류의 어느 부분을 이해하지 못합니까? 그것은 아주 명확하게 문제를 설명합니다 –

+0

@kieren 만약 당신이 pls이 하나를 해결하려고 여전히 같은 문제가 발생했습니다 이해 –

답변

1
var categoryid = from productcategories in abc.categories 
       where productcategories. 
          category_Name.Equals(categoryCombobox.Text) 
       select productcategories.category_Id; 

호버을하지 않을 수 있습니다. 예상대로 이드가 아니라는 것을 알 수 있지만 IEnumerable입니다. 당신이 원하는 것은 초기 쿼리에서 첫 번째 결과를 소요

// .First() trips the query and returns a single category_Id 
var id = (from productcategories in abc.categories 
     where productcategories. 
        category_Name.Equals(categoryCombobox.Text) 
     select productcategories.category_Id).First(); 

var produc = from pros in abc.products 
       where pros.Category_Id.Equals(id) 
       select new 
       { 
        productname = pros.product_Name, 
        productimage = pros.product_Image, 
        productprice = pros.product_Price, 
        productdescription = pros.product_Description         
       }; 

공지 사항 ids.First()이다.

+0

이것은 이것이 내가 당신의 쿼리를 사용할 때 문제가 있습니다. 오류 : 메서드 '첫 번째'는 최종 쿼리 작업으로 만 사용할 수 있습니다. 이 인스턴스에서 'FirstOrDefault'메서드를 대신 사용해보십시오. –

+0

where pros.Category_Id.Equals (categoryid.FirstOrDefault()) 나는이 쿼리를 현재 사용하고 있습니다. 많은 지원에 감사드립니다. –

+0

@ user852714 : 반영하도록 업데이트되었습니다. – Will

0

열거 형 세트에 대해 int 필드를 비교하려고합니다. 카테고리 ID 쿼리는 단일 값을 반환하는 경우

,이 시도 :

var produc = from pros in abc.products 
        where pros.Category_Id.Equals(categoryid.Single()) 
        select new 
        { 
         productname = pros.product_Name, 
         productimage = pros.product_Image, 
         productprice = pros.product_Price, 
         productdescription = pros.product_Description         

        }; 

을이 ID의 목록을 반환 해야하는 경우, 당신은 가입 단일 쿼리를 작성하는 것이 좋습니다. 나는 그것이 이름 categoryId

편집을 기반으로 단일해야하는데 가정 - 디버깅하는 동안 var 이상 100 % 정확 구문

var produc = from pros in abc.products 
    join cats in abc.categories on cats.category_id equals pros.Category_Id 
    where cats.category_Name.Equals(categoryCombobox.Text) 
    select new 
    { 
     productname = pros.product_Name, 
     productimage = pros.product_Image, 
     productprice = pros.product_Price, 
     productdescription = pros.product_Description         
    }; 
+0

아니요, 해당 쿼리는 Iqueryable 을 반환합니다. 나는 2 개의 데이터베이스 라운드 트립 대신에 내부적으로 조인을 수행하는 linq 쿼리를 사용하여 편집했다. – asawyer

+0

많은 감사합니다 asawyer 해당 작업 지금 –