如何将列表对象转换为数据透视表 [英] How do I convert list object into pivot

查看:90
本文介绍了如何将列表对象转换为数据透视表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下字段的信息列表:



I have list of information with following fields:

Project    State         Title
  ABC      Resolved      Title1
  ABC      Pending       Title2
  DEF      Archived      Title3
  DEF      Resolved      Title4
  DEF      Committed     Title5
  DEF      Active        Title6



我想要输出以下格式使用c#


I want output in following format using c#

Project    Pending      Resolved       Committed     Active
  ABC         2            1              0            3
  DEF         1            3              1            15



我使用的用户定义类列表包含以下数据成员


I am using list of user defined class with following data members

public int Id { get; set; }

        public string Collection { get; set; }

        public string Project { get; set; }

        public string Title { get; set; }

        public string State { get; set; }







这是我能做的最好的:




This is the best I could do :

var result = objItems.GroupBy(x => new { x.Project, x.State })
                .Select(g =>
                {
                    var a = g.ToList();
                    return
                    new
                    {
                        Project = a[0].Project,
                        Status = a[0].State,
                        Count = g.Count()
                    };
                });







请帮忙。



谢谢,




Please help.

Thanks,

推荐答案

void Main()
{
	List<Item> objItems = getSampleData();
	// for linqpad objItems.Dump();
	
	var result = objItems.GroupBy(x => new { x.Project, x.State })
                .Select(g =>
                {
                    var a = g.ToList();
                    return
                    new
                    {
                        Project = a[0].Project,
                        State = a[0].State,
                        Count = g.Count()
                    };
                });
											
   // for linqpad result.Dump();
   
   var query = result
    .GroupBy(c => c.State)
    .Select(g => new {
        ProjectName = g.Key,
         Pending    = g.Where(c => c.State == "Pending").Sum(c => c.Count),
         Resolved   = g.Where(c => c.State == "Resolved").Sum(c => c.Count),
         Committed  = g.Where(c => c.State == "Committed").Sum(c => c.Count),
         Active     = g.Where(c => c.State == "Active").Sum(c => c.Count)
    });
	
	// for linqpad query.Dump();
	
}

class Item
{
	public int Id { get; set; }
	//public string Collection { get; set; }
	public string Project { get; set; }
	public string Title { get; set; }
	public string State { get; set; }

   public Item (int id, string project, string title, string state)
   {
	this.Id = id;
	this.Project = project;
	this.Title = title;
	this.State = state;
   }
}

List<Item> getSampleData()
{
	List<Item> objItems = new List<Item>();

	objItems.Add(new Item(1, "ABC", "Title1", "Resolved" ));
	objItems.Add(new Item(2, "ABC", "Title2", "Pending" ));
	objItems.Add(new Item(3, "DEF", "Title3", "Archived" ));
	objItems.Add(new Item(4, "DEF", "Title4", "Resolved" ));
	objItems.Add(new Item(5, "DEF", "Title5", "Committed" ));
	objItems.Add(new Item(6, "DEF", "Title6", "Active" ));
	objItems.Add(new Item(7, "ABC", "Title2", "Pending" ));
	
	return objItems;
}







答案不是我发明的,而是从这里开始的



http:/ /stackoverflow.com/questions/167304/is-it-possible-to-pivot-data-using-linq [ ^ ]


这篇关于如何将列表对象转换为数据透视表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆