You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# LINQ GroupBy新增分组键使用强类型模型传视图的方法

多字段分组强类型实现方案

使用强类型dino1模型完全支持多分组键配置、额外查询字段映射,无需向视图传递匿名类型即可实现需求。

实现逻辑说明

  • 分组阶段可临时使用匿名类型作为多字段组合分组键,该匿名类型仅在LINQ查询内部生效,不会作为最终结果返回给视图
  • 所有需要在视图展示的字段,最终都映射到dino1类的对应属性,最终输出结果依然是List<dino1>类型,和原有视图强类型绑定逻辑完全兼容
  • 注意:非聚合的单值字段(如UserName、Role、fullname等)必须保证在同一组分组键下值完全一致,取同组第一条记录赋值即可;需要拼接的聚合字段(如doctypes、trans、qqqq)沿用原有string.Join逻辑处理
  • 如果需要新增展示字段,先在dino1类中定义对应属性,再按流程在数据映射、结果赋值环节补充对应逻辑即可

修改后完整代码示例

以下示例以新增UserName、fullname作为额外分组键、补充全字段返回为例,可根据自身业务需求调整分组键字段:

DataTable dt = new DataTable();
using (SqlDataAdapter da = new SqlDataAdapter(comcom))
{
    da.Fill(dt);
}

var zxc = from uu in dt.AsEnumerable()
          select new dino1
          {
              UserName = uu.Field<string>("UserName"),
              Role = uu.Field<string>("Role"),
              appcode = uu.Field<string>("appcde"),
              fullname = uu.Field<string>("fullname"),
              scheduledate = uu.Field<DateTime>("Scheddte"),
              datecreated = uu.Field<DateTime>("DateCreated"),
              doctypes = uu.Field<string>("doctype"),
              trans = uu.Field<string>("transactions"),
              qqqq = uu.Field<string>("quantity"),
              // 新增字段在此处补充DataTable列到dino1属性的映射即可
          };

// 多字段分组:在new{}内按需求追加所有分组键
var res1 = zxc.GroupBy(cc => new 
    { 
        cc.appcode, 
        cc.UserName, 
        cc.fullname
    })
    .Select(dd => new dino1 
    {
        // 分组键字段从分组Key中取值
        appcode = dd.Key.appcode,
        UserName = dd.Key.UserName,
        fullname = dd.Key.fullname,
        // 同组内值固定的单值字段,取第一条记录的对应值即可
        Role = dd.First().Role,
        scheduledate = dd.First().scheduledate,
        datecreated = dd.First().datecreated,
        // 多值聚合字段沿用原有拼接逻辑
        doctypes = string.Join(", ", dd.Select(ee => ee.doctypes).ToList()), 
        trans = string.Join(", ", dd.Select(ee => ee.trans).ToList()), 
        qqqq = string.Join(", ", dd.Select(ee => ee.qqqq).ToList())
        // 新增字段在此处补充对应赋值逻辑即可
    });

var namaewa = res1.ToList();

最终得到的namaewa是标准的List<dino1>类型,直接传入视图后,原有强类型绑定逻辑不需要做特殊调整即可正常接收、展示所有字段。

内容的提问来源于stack exchange,提问作者Zen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:00:17