не может получить количество товаров - PullRequest
3 голосов
/ 03 сентября 2011

У меня есть таблица продуктов со столбцами

 product_id (p.k)
 product_name
 product_description
 product_price
 category_id

, и я установил свойства для product_id следующим образом ... (первичный ключ, не ноль, AI)

Япытаясь представить количество одинаковых продуктов в представлении таблицы данных в виде столбца, подобного этому

product_name     product_description         stock available        product price

    a                good product                2  (a+a)                  300

    b                bad product                 3   (b+b+b)                  400

, с помощью следующего метода ....

var stockavailable = dbcontext.products
   .GroupBy(x => x.product_Id)
   .Select(a => new
                {
                    productid = a.Key,
                    productnam = a.FirstOrDefault().product_Name,
                    productdescr = a.FirstOrDefault().product_Description,
                    stockavailable = a.LongCount(),
                    productprice = a.FirstOrDefault().product_Price
                });

bindingsource.DataSource = stockavailable;
datagridview1.DataSource = bindingsource; 

Но он не показывает количествопродукты, даже если есть два одинаковых продукта.с другими product_id 's любой может помочь в этом ...

РЕДАКТИРОВАТЬ:
Могу ли я сделать, как это .....

  stockavailable = a.select(x=>x.product_id).Distinct().Count() 
    Instead of this stockavailable = a.LongCount(),

Ответы [ 2 ]

2 голосов
/ 03 сентября 2011

чего вам не хватает, так это подсчета количества строк с одинаковыми product_id

В SQL после того, как вы выполните группу, вы можете использовать агрегатные функции, такие как sum, count, max, min и т. Д.в вашем случае вы делаете группу, но забыли вставить счет.

смотрите здесь этот очень похожий вопрос для синтаксиса о том, как использовать счет в LINQ:

LINQв SQL с использованием GROUP BY и COUNT (DISTINCT)

0 голосов
/ 03 сентября 2011

Если product_id является первичным ключом, то не будет ли он отличным для каждой записи?Нет 2 строки будут иметь одинаковые product_id, верно?Если это так, то GroupBy(x => x.product_id) не будет группировать.Каждая строка будет отдельной группой.

Я думаю, что вы хотите что-то ближе к:

var stockavailable = dbcontext.products
   .GroupBy(x => new {x.product_Name, x.product_Description, x.product_Price })
   .Select(a => new
                {
                    productnam = a.Key.product_Name,
                    productdescr = a.Key.product_Description,
                    stockavailable = a.LongCount(),
                    productprice = a.Key().product_Price
                });

Кроме того, не было бы проще просто добавить столбец product_Quantity?То, как ваш стол накрыт сейчас, не так ли:

id  |  name  |  desc  |  price
1      a        good     350
2      a        good     300
3      b        bad      400

Итак, есть 2 одинаковых продукта с разными ценами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...