首页 > 数据库 >sqlsugar的行专列提示未将对象引用设置到对象实力,也就是null 情况的解决方法

sqlsugar的行专列提示未将对象引用设置到对象实力,也就是null 情况的解决方法

时间:2023-02-14 16:12:47浏览次数:37  
标签:ToList 对象 Select rowSelector sqlsugar var new null columns

把开源内的方法扒过来 加断点调吧  

ToPivotList1 因其方法内参数有this IEnumerable<T> source ,这样在使用的时候是可以在原查询中tolist后边点出来的.
参数 columnSelector 是对象 行转成的扩列 , rowSelector 保留列  dataSelector  对应sum 也就是数值列.
调用方法:查询.ToList().ToPivotTable(it => it.行转列的字段, it => it.保留列的字段, its => its.Any() ? its.Sum(x => x.数值字段):0);
最终找到是扩列前 扩列的字段有空值. 怼给datagridview后不显示最终建议使用 ToPivotTable()参数都一样, 转换成datatable.datagridview 能直接认出来的.
 public static  class DataHelper
    {
        public static List<dynamic> ToPivotList1<T, TColumn, TRow, TData>(
                                                                        this IEnumerable<T> source,
                                                                        Func<T, TColumn> columnSelector,
                                                                        Expression<Func<T, TRow>> rowSelector,
                                                                        Func<IEnumerable<T>, TData> dataSelector)
        {

            var arr = new List<object>();
            var cols = new List<string>();
            var rowName = "";
            if (rowSelector.Body is MemberExpression)
                rowName = ((MemberExpression)rowSelector.Body).Member.Name;
            else
                rowName = "Group_" + string.Join("_", ((NewExpression)rowSelector.Body).Arguments.Select(it => it as MemberExpression).Select(it => it.Member.Name));
            var columns = source.Select(columnSelector).Distinct();

            cols = (new[] { rowName }).Concat(columns.Select(x => x?.ToString())).ToList();
            var rows = source.GroupBy(rowSelector.Compile())
                             .Select(rowGroup => new
                             {
                                 Key = rowGroup.Key,
                                 Values = columns.GroupJoin(
                                     rowGroup,
                                     c => c,
                                     r => columnSelector(r),
                                     (c, columnGroup) => dataSelector(columnGroup))
                             }).ToList();


            foreach (var row in rows)
            {
                var items = row.Values.Cast<object>().ToList();
                items.Insert(0, row.Key);
                var obj = GetAnonymousObject(cols, items);
                arr.Add(obj);
            }
            return arr.ToList();
        }        private static dynamic GetAnonymousObject(IEnumerable<string> columns, IEnumerable<object> values)
        {
            IDictionary<string, object> eo = new ExpandoObject() as IDictionary<string, object>;
            int i;
            for (i = 0; i < columns.Count(); i++)
            {
                eo.Add(columns.ElementAt<string>(i), values.ElementAt<object>(i));
            }
            return eo;
        }

    }

 

标签:ToList,对象,Select,rowSelector,sqlsugar,var,new,null,columns
From: https://www.cnblogs.com/zuochanzi/p/17119928.html

相关文章

  • JavaScript对象属性的特性高级功能
    “usestrict”/创建一个对象最简单的方式:创建一个Object的实例,然后再为它添加属性和方法/varperson=newObject();person.name=“Hongbin”;person.age=21;per......
  • jQuery对象和JS对象区别与转换jQuery时间绑定&入口函数&样式控制
    jQuery对象和JS对象区别与转换JQuery对象和JS对象区别与转换1.JQuery对象在操作时,更加方便。2.JQuery对象和js对象方法不通用的3.两者相互转换jq......
  • SpringMVC:域对象共享数据
    SpringMVC:域对象共享数据使用ServletAPI向request域对象共享数据@RequestMapping("/testServletAPI")publicStringtestServletAPI(HttpServletRequestrequest){......
  • Java中如何打印对象内存地址?
    先看一个简单的程序,一般我们打印对象,大部分是下面的情况,可能会重写下toString()方法publicstaticvoidmain(String[]args){ Frolanfrolan=newFrol......
  • 对象存储服务MinIO安装,编写Starter整合,及永久链接配置
    (目录)对象存储服务MinIO1MinIO简介MinIO基于ApacheLicensev2.0开源协议的对象存储服务,可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,......
  • Java面向对象2(G~J)
    G   织女的红线(SDUT2240)importjava.util.Scanner;importjava.text.DecimalFormat;classSum{doublex1,y1,x2,y2;Sum(doublen1,doublem1,doublen2,dou......
  • Java面向对象6(AA ~ AE)
    AE 简单的复数运算(类和对象)(SDUT4303)importjava.util.*;classComplex{ inta,b; Complex(){ } Complex(intn,intm){ a=n; b=m; } voi......
  • Java面向对象3(K~O)
     K    正方形(SDUT2444)importjava.lang.reflect.Array;importjava.util.*;publicclassMain{ publicstaticvoidmain(String[]args){ Scanners......
  • JavaScript-面向对象的理解
    Everythingisobject(万物皆对象)作为开发大家都非常熟悉的一句话。(1)对象是单个事物的抽象。在生活中大的事物圈子,比如一只猫、一本书、一个人,都可以理解为对象(objec......
  • java 复制Map对象(深拷贝与浅拷贝)
    1.深拷贝与浅拷贝浅拷贝:只复制对象的引用,两个引用仍然指向同一个对象,在内存中占用同一块内存;被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的......