Возникла ошибка «Не поддерживается Исключение не обработано кодом пользователя» - PullRequest
0 голосов
/ 17 августа 2011

У меня есть таблица

  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

Я пытаюсь заполнить сетку данных в зависимости от выборав поле со списком .. вот так ....

       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;

Не поддерживается. Исключительная ситуация: код пользователя
Невозможно сравнить элементы типа 'System.Linq.IQueryable`1'.Поддерживаются только примитивные типы (такие как Int32, String и Guid) и типы сущностей.

Ответы [ 2 ]

1 голос
/ 17 августа 2011
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                                   
               };

Notice ids.First(), который получает первый результат из исходного запроса.

0 голосов
/ 17 августа 2011

Вы пытаетесь сравнить поле 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                                   

                   };

Если он должен вернутьСписок идентификаторов, вы хотите написать один запрос с объединением.Я предполагаю, что он должен быть единичным на основе имени categoryId

edit - может быть не на 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                                   
    };
...