如何在linq中计算多个不同的列到sql?

时间:2015-04-29 10:38:27

标签: c# sql-server linq

我正在与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 });

但是如何在单个查询中获得两者的不同值的计数?

2 个答案:

答案 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();