问题描述
我有以下数据模型,针对每个 X1、X2 和 X3,我有 A1 和 A2 具有相同的 FirstTime 和 LastTime 或具有不同的值。
var dataModel = new Dictionary<string,Dictionary<string,DataModel>>
{
{
"X1",new Dictionary<string,DataModel>
{
{
"A1",new DataModel { Name="A1",FirstTime = new DateTime(2020,12,15,5,30,45),LastTime = new DateTime(2020,16,45) }
},{
"A2",new DataModel { Name="A2",45) }
}
}
},{
"X2",11,{
"X3",45) }
}
}
}
};
我需要在所有 X1、X2 和 X3 中以最小的 FirstTime 和 LastTime 获取 A1 和 A2。这是我的尝试,还有其他更好的方法吗?
var lstDataModel = new List<DataModel>();
foreach (var dm in dataModel)
{
foreach (var val in dm.Value)
{
lstDataModel.Add(new DataModel
{
Name = val.Value.Name,FirstTime = val.Value.FirstTime,LastTime = val.Value.LastTime,});
}
}
var query = lstDataModel
.GroupBy(cm => cm.Name)
.Select(g => new {
g.Key,FirstTime = g.Min(cm => cm.FirstTime),LastTime = g.Min(cm => cm.LastTime)
}).ToList();
这是DataModel
课,
public class DataModel
{
public string Name { get; set; }
public DateTime FirstTime { get; set; }
public DateTime LastTime { get; set; }
}
解决方法
假设它们都具有相同的键 (A1/A2):
var query = dataModel.Values
.SelectMany(d => d.Keys)
.Distinct()
.Select(key => new
{
Key = key,FirstTime = dataModel.Values.Min(v => v[key].FirstTime),LastTime = dataModel.Values.Min(v => v[key].LastTime),})
.ToList();
不确定它是否“更好”,但需要更少的代码行