我正在与Linq挣扎,因此这是一个蹩脚的问题,但仍然...... 我有一个包含以下4列的表
Pid SKU colorid sizeid
1 'A65102' 38 2
2 'A65102' 38 4
3 'A65102' 38 18
我必须得到多少不同的颜色和尺寸选项。
在sql中,我用它来做:
select count(distinct [sizeid]) ,count(distinct [colors])
from [item_master]
where sku = 'A65102'
但在Linq,我可以通过
获得所有值var dd = (from im in db.item_masters
where im.sku.Contains("A65102")
select new {im.sizeid,im.colors });
但是如何在单个查询中获得两者的不同值的计数?
答案 0 :(得分:3)
您可以使用GroupBy
:
var distinctCounts = db.item_masters.GroupBy(im => im.sku)
.Where(grp => grp.Key == "A65102")
.Select(grp => new {
CntSizes = grp.Select(im => im.sizeid).Distinct().Count(),
CntColors = grp.Select(im => im.colorid).Distinct().Count()
});
答案 1 :(得分:2)
您可以使用您拥有的查询作为数据源来检索此数据(如果您希望以后将其用于其他内容,则非常有用):
var dd = (from im in db.item_masters
where im.sku == "A65102"
select new {im.sizeid, im.colors}).ToList();
var numDistinctSizes = dd.Select(x => x.sizeid).Distinct().Count();
var numDistinctColors = dd.Select(x => x.colors).Distinct().Count();