我有一个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;
}
}
答案 0 :(得分:4)
匿名类型投影初始化程序应该是简单的名称或成员访问权限。所以你需要添加一个如下所示的明确名称:
data.GroupBy(x => new {S = x["dataKey"] })