木子屋 Dnawo's BLOG

C#匿名对象转为集合

👤 dnawo 📅 2013-05-22 👁 6929 👍 0 💬 0 🔄 来源:本站原创
今天做一个接口时,要求返回数据类型为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)

暂无评论。

验证码
评论需审核通过后显示
← 上一篇 EasyUI创建网站后台页面布局示例 下一篇 → ASP.NET调用jarsigner.exe失败:系统找不到指定…