[英]Pivot List of Object C# MVC Solution
在我的 controller 中,我返回由我的 model 定义的数据库查询结果(对象列表)。 我在视图中显示这个。 例如:
道具1 | 道具2 | 道具3 | 道具4 | 道具5 |
---|---|---|---|---|
AAA | 1123 | 400 | 35% | 600 美元 |
BBB | 3444 | 23 | 45% | 235 美元 |
CCC | 5000 | 55 | 15% | 555 美元 |
DDD | 2500 | 264 | 70% | 243 美元 |
我想 pivot 这个结果如下所示:
道具1 | AAA | BBB | CCC | DDD |
---|---|---|---|---|
道具2 | 1123 | 3444 | 5000 | 2500 |
道具3 | 400 | 23 | 55 | 264 |
道具4 | 35% | 45% | 15% | 70% |
道具5 | 600 美元 | 235 美元 | 555 美元 | 243 美元 |
实现这一目标的最佳方法是什么? 我最初在 SQL 查询中进行了旋转,并有一个代表底部结果的 model,但是由于我经常更改并请求添加从其他列等计算的新字段,因此变得难以管理。
请参阅下面的示例实现扩展方法,该方法使用对 pivot 和IEnumerable<T>
的反射。
示例用法
// Test Type
public record MyObj(string Prop1, int Prop2, int Prop3);
// test data
var list = new List<MyObj> {
new MyObj("AAA", 1123, 400),
new MyObj("BBB", 2123, 500),
new MyObj("CCC", 3123, 600)
};
Console.Write(list.Pivot());
OUTPUT
执行
public static class PivotExtension
{
public static IEnumerable<ExpandoObject> Pivot<T>(this IEnumerable<T> objs)
{
var objArray = objs.ToArray();
var properties = typeof(T).GetProperties();
foreach (var property in properties)
{
var obj = new ExpandoObject();
var objDic = (IDictionary<string, object>)obj;
objDic.Add("Name", property.Name);
for (int i = 0; i < objs.Count(); i++)
objDic.Add($"Row_{i.ToString()}", property.GetValue(objArray[i]));
yield return obj;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.