C# 需要获取A1和A2,在所有X1、X2和X3内的最短首次和最后一次。寻找更好的方法?
我有下面的数据模型,针对每个X1、X2和X3,我有A1和A2,它们要么第一次相同,要么最后一次相同,要么值不同C# 需要获取A1和A2,在所有X1、X2和X3内的最短首次和最后一次。寻找更好的方法?,c#,C#,我有下面的数据模型,针对每个X1、X2和X3,我有A1和A2,它们要么第一次相同,要么最后一次相同,要么值不同 var dataModel = new Dictionary<string, Dictionary<string, DataModel>> { { "X1", new Dictionary<string, DataModel>
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, 12, 16, 5, 30, 45) }
},
{
"A2",
new DataModel { Name="A2", FirstTime = new DateTime(2020, 12, 15, 5, 30, 45), LastTime = new DateTime(2020, 12, 16, 5, 30, 45) }
}
}
},
{
"X2",
new Dictionary<string, DataModel>
{
{
"A1",
new DataModel { Name="A1", FirstTime = new DateTime(2020, 11, 15, 5, 30, 45), LastTime = new DateTime(2020, 11, 16, 5, 30, 45) }
},
{
"A2",
new DataModel { Name="A2", FirstTime = new DateTime(2020, 11, 15, 5, 30, 45), LastTime = new DateTime(2020, 11, 16, 5, 30, 45) }
}
}
},
{
"X3",
new Dictionary<string, DataModel>
{
{
"A1",
new DataModel { Name="A1", FirstTime = new DateTime(2020, 12, 15, 5, 30, 45), LastTime = new DateTime(2020, 12, 16, 5, 30, 45) }
},
{
"A2",
new DataModel { Name="A2", FirstTime = new DateTime(2020, 12, 15, 5, 30, 45), LastTime = new DateTime(2020, 12, 16, 5, 30, 45) }
}
}
}
};
假设它们都有相同的键(A1/A2):
var query=dataModel.Values
.SelectMany(d=>d.Keys)
.Distinct()
.选择(键=>新建
{
键=键,
FirstTime=dataModel.Values.Min(v=>v[key].FirstTime),
LastTime=dataModel.Values.Min(v=>v[key].LastTime),
})
.ToList();
不确定它是否“更好”,但它需要更少的代码行如果这种方法足够好,那么就不需要更好的方法。这种方式对您足够好吗?感谢您假设键(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();
public class DataModel
{
public string Name { get; set; }
public DateTime FirstTime { get; set; }
public DateTime LastTime { get; set; }
}