C# 需要获取A1和A2,在所有X1、X2和X3内的最短首次和最后一次。寻找更好的方法?

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>

我有下面的数据模型,针对每个X1、X2和X3,我有A1和A2,它们要么第一次相同,要么最后一次相同,要么值不同

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; }
}