-------------
Products |
-------------
id |
name |
price |
image |
-------------
-------------
Sizes |
-------------
id |
name |
quantity |
id_product |
-------------
表Sizes
中的我在每种尺寸的产品中都保留了不同的尺寸和数量。例如,我的产品中有一条牛仔裤,但在表Sizes
中,我将它们保存在Sizes.Name M和数量20,Sizes.Name XL和数量30等等。
在我的项目中,我希望显示所有数据im gridview我有这样的
id |name |price | size_name | quantity |
-----------------------------------------------------------
1 jeans 100 M 20
1 jeans 100 XL 30
1 jeans 100 S 45
等
我想要展示的是:
id |name |price | S | M | XL |
-------------------------------------------------
1 jeans 1000 45 20 30
所以我读到我必须使用一个支点,但不知道如何开始以及接下来该做什么。这是我的一些代码:
var query = from product in context.Products
join size in context.Sizes on product.ID equals r.Product.ID
//what's the next step?
select new { };
dataGridView1.DataSource = query.ToList();
===================================
修改
====================================
现在我有......这样
好{id, name}
不是关键,
但似乎还有另一个问题,
var q = (from p in context.Produkty
join r in context.Rozmiary
on p.ID equals r.Produkt.ID
into sizes
select new
{
S = sizes.Where(x => x.Nazwa == NazwaRozmiaru.S).Sum() ?? 0
});
dataGridView1.DataSource = q.ToList();
给了我这个
Error 2 'System.Collections.Generic.IEnumerable<Magazynier.Model.Rozmiary>' does not contain a definition for 'Sum' and the best extension method overload 'System.Linq.ParallelEnumerable.Sum(System.Linq.ParallelQuery<decimal?>)' has some invalid arguments C:\Users\Piotr\Downloads\Magazynier (7)\Magazynier\Magazynier\Form1.cs 45 34 Magazynier
和这个
Error 3 Instance argument: cannot convert from 'System.Collections.Generic.IEnumerable<Magazynier.Model.Rozmiary>' to 'System.Linq.ParallelQuery<decimal?>' C:\Users\Piotr\Downloads\Magazynier (7)\Magazynier\Magazynier\Form1.cs 45 34 Magazynier
和这个
Error 4 The type arguments for method 'System.Linq.Enumerable.ToList<TSource>(System.Collections.Generic.IEnumerable<TSource>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. C:\Users\Piotr\Downloads\Magazynier (7)\Magazynier\Magazynier\Form1.cs 47 43 Magazynier
和我的尺码(又名Rozmiary)在c#
中看起来像这样public enum NazwaRozmiaru
{
S,
M,
L,
}
public class Rozmiary : KlasaBazowa
{
public Produkty Produkt { get; set; }
public NazwaRozmiaru Nazwa { get; set; }
public int Ilosc { get; set; }
}
答案 0 :(得分:3)
假设:
{id, name}
是Sizes的关键试试这个:
from product in context.Products
join size in context.Sizes
on product.ID equals r.Product.ID
into sizes
select new {
product.id,
product.name,
product.price,
S = sizes.Where(x => x.name == "S").Select(x => x.quantity).SingleOrDefault(),
M = sizes.Where(x => x.name == "M").Select(x => x.quantity).SingleOrDefault(),
XL = sizes.Where(x => x.name == "XL").Select(x => x.quantity).SingleOrDefault()
}
如果{id, name}
不是密钥,请将其插入:
S = sizes.Where(x => x.name == "S").Sum(x => x.quantity) ?? 0
如果你想显示所有尺寸,但是你不知道会有什么尺寸,你将无法使用LINQ获得一个漂亮的桌子,但你可以这样做:
select new {
product.id,
product.name,
product.price,
quantitiesBySize = sizes.ToDictionary(size => size.name, size => size.quantity)
}