我正在写一个 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/