将字典列表转换为模型

时间:2016-10-12 16:33:44

标签: c# .net linq

我有一个List,其中包含Dictionary<string, string>,表示来自多个联接表的数据库中的行。我已经尝试了各种LINQ方法,但我总是碰壁,LINQ只是不允许在这个数据结构上进行某些操作。我试图尽可能地简化代码示例,而不是歪曲核心问题所以......

如何从KeyValuePairs内的Dictionary中提取明确List并将其放入Model

我需要一个可扩展的解决方案,其中Model可以对subData执行相同的操作。

public class Program
{
    public static void Main(string[] args)
    {
        List<Dictionary<string, string>> data = GetData();
        data.Add(new Dictionary<string, string>() { ["modelData"] = "Bob", ["subModelData"] = "Frank" });
        data.Add(new Dictionary<string, string>() { ["modelData"] = "Nancy", ["subModelData"] = "Boy" });
        List<Model> models = new List<Model>();
        //Fails in this linq statement. Anonymous types don't allow key accessors
        foreach (Dictionary<string, string> distinctModel in data.GroupBy(x => new { x["dataKey"] }))
        {
            List<Dictionary<string, string>> newModelData = data.Where(d => d["data1Key"] == distinctModel["dataKey"]).ToList();
            Model newModel = new Model(newModelData);
            models.Add(newModel);
        }
    }
}

public class Model
{
    public string modelData;
    public List<Dictionary<string, string>> subData;

    public Model(List<Dictionary<string, string>> data) {
        modelData = data[0]["dataKey"];
        data.Remove("dataKey");
        subData = data;
    }
}

1 个答案:

答案 0 :(得分:4)

匿名类型投影初始化程序应该是简单的名称或成员访问权限。所以你需要添加一个如下所示的明确名称:

data.GroupBy(x => new {S = x["dataKey"] })