繁体   English   中英

Pivot 列表 Object C# MVC解决方案

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM