为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以使用LINQ对数据进行数据透视?

是否可以使用LINQ对数据进行数据透视?

斯蒂芬大帝 2019-06-11 21:06:40
是否可以使用LINQ对数据进行数据透视?我想知道是否可以使用LINQ从下列布局中将数据枢轴:CustID | OrderDate | Qty 1      | 1/1/2008  | 100 2      | 1/2/2008  | 200 1      | 2/2/2008  | 350 2      | 2/28/2008 | 221 1      | 3/12/2008 | 250 2      | 3/15/2008 | 2150变成这样:CustID  | Jan- 2008 | Feb- 2008 | Mar - 2008 | 1       | 100       | 350       |  250 2       | 200       | 221       | 2150
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

像这样吗?

List<CustData> myList = GetCustData();

var query = myList
    .GroupBy(c => c.CustId)
    .Select(g => new {
        CustId = g.Key,
        Jan = g.Where(c => c.OrderDate.Month == 1).Sum(c => c.Qty),
        Feb = g.Where(c => c.OrderDate.Month == 2).Sum(c => c.Qty),
        March = g.Where(c => c.OrderDate.Month == 3).Sum(c => c.Qty)
    });

GroupBy在Linq中,它的工作方式与SQL不同。在SQL中,可以获得键和聚合(行/列形状)。在Linq中,可以将键和任何元素作为键的子元素(分层形状)。要执行支点,必须将层次结构投影回您选择的行/列形式。


查看完整回答
反对 回复 2019-06-11
?
森林海

TA贡献2011条经验 获得超2个赞

我认为,最简洁的方法是使用查找:

var query =
    from c in myList
    group c by c.CustId into gcs
    let lookup = gcs.ToLookup(y => y.OrderDate.Month, y => y.Qty)
    select new
    {
        CustId = gcs.Key,
        Jan = lookup[1].Sum(),
        Feb = lookup[2].Sum(),
        Mar = lookup[3].Sum(),
    };


查看完整回答
反对 回复 2019-06-11
  • 3 回答
  • 0 关注
  • 613 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信