Mam stolik
product(table name)
product_id
product_name
product_image
product_price
product_description
category_id
category(table name )
category_id
category_name
category_description
Mam combobox nazwany jako categoryCombobox
i widok siatki nazwany jako productgridview
Próbuję zapełnić siatkę danych w zależności od wyboru w polu kombi... w ten sposób ....
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;
}
Mam taki błąd ......
BŁĄD : W tej linii productbindingsource.DataSource = product;
Nieobsługiwane Wyjątek został cofnięty przez kod użytkownika
Nie można porównać elementów typu „System.Linq.IQueryable`1”. Tylko typy pierwotne (takie jak Int32, String i Guid) oraz encja obsługiwane typy.
2 odpowiedzi
var categoryid = from productcategories in abc.categories
where productcategories.
category_Name.Equals(categoryCombobox.Text)
select productcategories.category_Id;
Najedź kursorem na var
podczas debugowania. Zobaczysz, że NIE jest to identyfikator, jak się spodziewasz, ale IEnumerable
. To, co chcesz zrobić, to
// .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
};
Zwróć uwagę na ids.First()
, który pobiera pierwszy wynik z początkowego zapytania.
Twoja próba porównania pola int z zestawem przeliczalnym.
Jeśli zapytanie categoryID zwróci tylko jedną wartość, spróbuj tego:
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
};
Jeśli ma zwrócić listę identyfikatorów, będziesz chciał napisać pojedyncze zapytanie ze sprzężeniem. Zakładam, że ma być singlem na podstawie imienia categoryId
Edytuj - może nie być w 100% poprawna składnia
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
};
Podobne pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.
IQueryable
i że musisz porównać typy pierwotne. Problem polega na tym, że próbujesz porównaćIQueryable
obiekty...