微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要在所有 X1、X2 和 X3 中以最小的 FirstTime 和 LastTime 获取 A1 和 A2寻找更好的方法?

如何解决需要在所有 X1、X2 和 X3 中以最小的 FirstTime 和 LastTime 获取 A1 和 A2寻找更好的方法?

我有以下数据模型,针对每个 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();

不确定它是否“更好”,但需要更少的代码行

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。