hashTable取值遍历Value问题

事件源头:
当用IQueryable查询并用groupby select 时,每次都new object匿名对象,导致在var mEntitys = projectApp.SearchDataAllYear();时mEntitys中data["main"]不可遍历

public Result SearchDataAllYear()
{
            Dictionary<string, List<ProjectDetailEntityExt>> mEntitys = new Dictionary<string, List<ProjectDetailEntityExt>>();
            List<ProjectEntity> mProjectItems = new List<ProjectEntity>();

            var mainlist = detailviewService.IQueryable().Where(p => p.F_DeleteMark == null || p.F_DeleteMark == false)
                .GroupBy(p => new { p.F_FullName, p.F_ProjectYear })
                .Select(p => new
                {
                    p.Key.F_FullName,
                    p.Key.F_ProjectYear,
                    total = p.Sum(w => w.F_ProjectFee)
                }).ToList();

            Result rs = new Result();
            rs.data.Add("main", mainlist);
            return rs;
}

解决方法:定义一个实体类,替代匿名object

//新建实体类
public class mp
{
            public string project_id { get; set; }
            public string projectTitle { get; set; }
            public string projectFullName { get; set; }
            public int projectYear { get; set; }
            public DateTime? projectTime { get; set; }
            public Decimal? total { get; set; }
 }
//改用实体类
public Result SearchDataAllYear2()
 {
            Dictionary<string, List<ProjectDetailEntityExt>> mEntitys = new Dictionary<string, List<ProjectDetailEntityExt>>();
            List<ProjectEntity> mProjectItems = new List<ProjectEntity>();
            var sonlist = detailviewService.IQueryable().Where(p => p.F_DeleteMark == null || p.F_DeleteMark == false)
                     .GroupBy(p => new { p.project_id,p.F_ProjectTitle,p.F_FullName,p.F_ProjectYear,p.F_ProjectTime })
                     .Select(p => new mp()
                     {
                         project_id = p.Key.project_id,
                         projectTitle = p.Key.F_ProjectTitle,
                         projectFullName = p.Key.F_FullName,
                         projectYear = p.Key.F_ProjectYear,
                         projectTime = p.Key.F_ProjectTime,
                         total = p.Sum(w => w.F_ProjectFee)
                     }).ToList();
            Result rs = new Result();
            rs.data.Add("son", sonlist);
            return rs;
 }

此时可以遍历,注意要用IQueryable<T>强制类型转换一下

 var me = projectApp.SearchDataAllYear2();
foreach (var attt in (IQueryable<ProjectApp.mp>)me.data["son"])
{
  var pid = item.project_id;
  var projectTitle = item.projectTitle;
  var projectFullName = item.projectFullName;
  var projectYear = item.projectYear;
  var projectTime = item.projectTime;
  var total = item.total;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx阅读 8,354评论 0 16
  • 一. Java基础部分.................................................
    wy_sure阅读 3,840评论 0 11
  • 记得有次乘坐公交车,我低着头走向后座,坐下的时候看到地上有把伞,纯蓝色的伞面有些锈迹斑点,式样倒很小巧,却没有伞柄...
    若闻淼淼阅读 837评论 5 22