C#匿名对象转为集合

今天做一个接口时,要求返回数据类型为json对象数组,但服务器端处理后得到的是一个匿名对象,例如:

var detail = new { PayOut = 50, InCome = 100 };

尝试用dynamic关键字,测试可以实现需求,代码如下:

using (testContext context = new testContext())
{
    DateTime date1 = DateTime.Parse("2013-05-20");
    DateTime date2 = DateTime.Parse("2013-05-27");
    var details = context.AdDetails.Where(d => d.Created >= date1 && d.Created < date2);

    var detail = new { PayOut = details.Sum(item => item.PayOut), InCome = details.Sum(item => item.InCome) };
    var data = new List<dynamic>() { detail };
    Console.WriteLine(new JavascriptSerializer().Serialize(data));
}

后来对Linq进行构造,一样可以完成:

using (testContext context = new testContext())
{
    DateTime date1 = DateTime.Parse("2013-05-20");
    DateTime date2 = DateTime.Parse("2013-05-27");

    var data = context.AdDetails.Where(d => d.Created >= date1 && d.Created < date2).ToList()
        .Select(d => new { PayOut = d.PayOut, InCome = d.InCome, Group = 1 })
        .GroupBy(d => d.Group) //关键点
        .Select(g => new { PayOut = g.Sum(item => item.PayOut), InCome = g.Sum(item => item.InCome) });
    Console.WriteLine(new JavascriptSerializer().Serialize(data));
}

对应SQL语句为:

select SUM(PayOut) PayOut, SUM(InCome) InCome from AdDetail where Created>='2013-05-20' and Created<'2013-05-27'


评论: 0 | 引用: 0 | 查看次数: 6192
发表评论
登录后再发表评论!