c# - 如何使用 linq 树表达式创建具有动态列的数据透视表

标签 c# asp.net linq linq-to-dataset over-clause

我正在写一个 asp.net C# Web应用程序; 我有一个名为“table1”的内存数据表'具有三列' country ', ' productId ' 和 ' productQuantity '; 我想旋转该表以获得第一列为“table2”的新表(假设为“country”) ' 作为固定列和列的动态编号和名称' product_1 ', ' product_2 ', ..., ' product_n '根据'table1中存在的产品总数'; 第一列' country ' 必须包含国家名称; 动态生成的列' product_1 ', ' product_2 ', ..., ' product_n ' 必须包含 productQuantity已在指定国家销售的每种特定产品

我正在使用 Linq 查询表达式编写代码;问题是我不能对名称和产品的值(value)进行硬编码;我无法预测数据表中存在多少产品; 现在,我正在使用以下表达式测试结果:

var query = table1.AsEnumerable()
                .GroupBy(c => c.country)
                .Select(g => new
                {
                    country = g.Key,
                    product_1 = g.Where(c => c.productId == "a30-m").Select(c => c.productQuantity).FirstOrDefault(),
                    product_2 = g.Where(c => c.productId == "q29-s").Select(c => c.productQuantity).FirstOrDefault(),
          .
          .
          .
                    product_n = g.Where(c => c.productId == "g33-r").Select(c => c.productQuantity).FirstOrDefault()
                });

我举了一个例子来说明“table1” '看起来如何'table2 ' 必须看起来像:

view example image of the two tables table1 and table2

任何人都可以帮我找到一个使用 linq 树表达式或其他 linq 方法创建带有动态列的数据透视表的解决方案吗? 任何帮助将不胜感激。

最佳答案

不可能在 sql 中查询动态列数。通过扩展,也无法使用 linq 来做到这一点,因为它是基于 sql 的。

所以你运气不好,抱歉。

然而,您可以从 sql 服务器请求所有现有的 {country, product} 对,并在客户端上完成剩余的处理(通过执行 重建国家和产品>.Select(x => x.product).Distinct() 等等,然后在数据网格中动态创建列。

关于c# - 如何使用 linq 树表达式创建具有动态列的数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4928261/

相关文章:

c# - C#中的隐式类型转换

c# - 如何将导弹图像拉到线上?

c# - 无法在 Windows 11 上找到任何已安装的 .NET Core SDK(Visual Studio 代码)

c# - 我们可以在 C# 中为运行时创建的控件在运行时创建多个事件吗

c# - 动态创建 GroupBy 语句

c# - 匿名类型 LinQ - 检查空值 - 异常

c# - 搜索通用类字段名称

asp.net - 有关可移动组件资源的提示

c# - 如何删除字符串?

c# - 循环地将字符串分割成锯齿状数组