2011-08-17 87 views
-2

我有表得到一个错误“不supportedException是由用户代码未处理的”

product(table name) 
     product_id 
     product_name 
     product_image 
     product_price 
     product_description 
     category_id 

    category(table name) 
     category_id 
     category_name 
     category_description 

我有一个组合框将其命名为categoryCombobox和网格视图命名为productgridview

我试图填充DataGrid这取决于选择的组合框..类似这样的....

 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是由用户代码
unhaldled无法比拟型 'System.Linq.IQueryable`1' 的元素。 仅支持基本类型(例如Int32,String和Guid)和实体类型 。

+0

需要更多的信息才能够提供帮助,比如abc.products的构成。 – 2011-08-17 12:19:06

+1

错误的哪个部分你不明白?它很清楚地解释了这个问题 – 2011-08-17 12:20:22

+0

@ kieren如果你明白请试着解决这个问题仍然是我得到同样的问题 – 2011-08-17 12:28:07

回答

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

将鼠标悬停在var同时调试。你会发现它不是你想要的,而是一个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

你试图比较一个int字段和一个可枚举集合。

如果查询的categoryID只会返回一个值,试试这个:

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

编辑为单 - 可能不是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         
    }; 
相关问题