C# 如何使用LINQ展平类内的嵌套字典
与我所寻找的最接近的解决方案是这个线程 但我在尝试这种方法时出错了 无法从用法推断方法“System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable,System.Func>)”的类型参数。尝试显式指定类型参数 我的代码:C# 如何使用LINQ展平类内的嵌套字典,c#,linq,C#,Linq,与我所寻找的最接近的解决方案是这个线程 但我在尝试这种方法时出错了 无法从用法推断方法“System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable,System.Func>)”的类型参数。尝试显式指定类型参数 我的代码: var aa = t.data.SelectMany(x => x.Value.innerData.SelectMany(y => new
var aa = t.data.SelectMany(x =>
x.Value.innerData.SelectMany(y => new { /*Error at this SelectMany*/
url = x.Key,
disp = x.Value.disp,
date = y.Key,
count = y.Value.count,
rank = y.Value.rank,
}));
我的班级:
public class TData {
public Dictionary<string, TDetail> data { get; set; }
}
public class TDetail {
public string disp { get; set; }
[Newtonsoft.Json.JsonProperty("data")]
public Dictionary<string, Metrics> innerData { get; set; }
}
public class Metrics {
public string count { get; set; }
public string rank { get; set; }
}
在这种情况下,如何显式指定类型参数?谢谢。太多
选择多个:
var t = new TData(); // your TData
var aa = t.data.SelectMany(x =>
x.Value.innerData.Select(y => new
{
url = x.Key,
disp = x.Value.disp,
date = y.Key,
count = y.Value.count,
rank = y.Value.rank,
}));
内部的一个必须是一个SelectSelectMany
将每个项目投影到一个项目序列中(然后将其展平)。您的外部SelectMany
将每个项目投影到序列中,而您的内部SelectMany
将每个项目投影到非序列的单个项目中。如果您想按顺序将每个项目投影到单个项目中,则需要使用Select
,而不是SelectMany
您的代码解决了我的问题,但不理解您所说的“注意,在所有这些操作中,您正在丢失TData.data.key,因为您只访问TData.data.Value”。在最后的选择中,我使用TData键作为“url”。你能解释一下吗?@贾斯汀没有注意到。谢谢你的解释。
var t = new TData(); // your TData
var aa = t.data.SelectMany(x =>
x.Value.innerData.Select(y => new
{
url = x.Key,
disp = x.Value.disp,
date = y.Key,
count = y.Value.count,
rank = y.Value.rank,
}));