【问题标题】:How I can filter a DataTable and create a new dataTable in ASP.NET with Linq?如何使用 Linq 在 ASP.NET 中过滤 DataTable 并创建新的 dataTable?
【发布时间】:2014-02-20 12:45:28
【问题描述】:

您好,我的 asp.net 应用程序有问题。

我有一个数据表,我想用 linq 过滤这个表到数据表。

我的 DataTable 有这样的结构:

用户 |许可证 |部门 |时间 |电话号码 |位置

我想要一个在部门中没有重复条目的新数据表。例如:

这是基本数据表中的三行

userA | 1 | IT        | 4min | 0123/123 | germany 
userB | 1 | Marketing | 3min | 0232/232 | germany 
userC | 1 | IT        | 1min | 0233/233 | germany 

这是我想要的:

部门 |许可证

It         | 2 
Marketing  | 1 

这意味着必须计算使用许可。

这是我的代码:

更新:

 var query = from row in catia_user_table.AsEnumerable()
                            group row by row.Field<string>("Department") into grp
                            orderby grp.Key
                            select new
                            {
                                Department = grp.Key,
                                Licenses = grp.Sum(r => r.Field<int>("Licenses"))

                            };

                    DataTable tb = query.CopyToDataTable();

认为问题在于我的 DataTable 中的每一行都来自 Typ 字符串还是不是那么重要?

【问题讨论】:

  • 您需要在查询中按部门对其进行分组。 CopyToDataTable() 是正确的,因为它会根据过滤后的值创建新的 DataTable。如果我正确理解您的问题,请发表评论。

标签: c# asp.net linq listview datatable


【解决方案1】:

就像@Krishnraj Rana 所说,您只需按部门分组,然后使用Sum 运算符计算每个部门的总许可证。见下文:

var query = catia_user_table.AsEnumerable().GroupBy(n => n.Department)
                            .Select(g => new
                             {
                                Department = g.Key,
                                Licenses = g.Sum(n => n.Licensec)
                             }).ToList();

【讨论】:

  • System.Data.DataTable 不满足“GroupBy”的定义,并且找不到带有“GroupBy”的Extentionmethod,其参数来自Typ“System.Data.DataTable”接受。 (Using-Direktive 或 Assemblyreference)
  • 嗨@Tarasov,尝试在GroupBy 之前添加AsEnumerable
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多