C# 如何对具有相同最长日期的列表中的项目进行分组并对其进行筛选

C# 如何对具有相同最长日期的列表中的项目进行分组并对其进行筛选,c#,.net,linq,list,ienumerable,C#,.net,Linq,List,Ienumerable,我有列表,其中包含以下4列和数据: TakenDate UerID TakenItem TakenValue Aug-10-2014 34 Weight 140 Aug-10-2014 34 Height 5.5 Mar-15-2015 34 Weight 141 Mar-15-2015 34 Height 5.5 我想根据TakenDate将它们分组在单独的列表中,

我有
列表
,其中包含以下4列和数据:

TakenDate     UerID   TakenItem   TakenValue
Aug-10-2014     34     Weight       140
Aug-10-2014     34     Height       5.5
Mar-15-2015     34     Weight       141
Mar-15-2015     34     Height       5.5
我想根据TakenDate将它们分组在单独的列表中,并找出我应该使用的列表中包含最新拍摄日期的详细信息

以下是我尝试过的:

var q = from n in TakenBMI 
        group n by n.TakenDate into g 
        select g.OrderByDescending(t=>t.TakenDate )
                .FirstOrDefault(); 

var m = from n in TakenBMI 
        group n by n.TakenDate into g 
        select new { TakenDate = Convert.ToDateTime(q) };

此外,如果有人能在获得最晚日期的列表后提出建议,那么如果可能的话,我如何获得第二个最晚日期的列表?感谢所有回复的人

我通常使用字典

类程序
{
静态void Main(字符串[]参数)
{
列表数据=新列表(){
new TakenBMI(){TakenDate=DateTime.Parse(“2014年8月10日”),UerID=34,TakenItem=“Weight”,TakenValue=140},
新TakenBMI(){TakenDate=DateTime.Parse(“2014年8月10日”),UerID=34,TakenItem=“Height”,TakenValue=5.5},
new TakenBMI(){TakenDate=DateTime.Parse(“2014年8月15日”),UerID=34,TakenItem=“Weight”,TakenValue=141},
新TakenBMI(){TakenDate=DateTime.Parse(“2014年8月15日”),UerID=34,TakenItem=“Height”,TakenValue=5.5},
};
Dictionary dict=data.AsEnumerable()
.GroupBy(x=>x.TakenDate,y=>y)
.ToDictionary(x=>x.Key,y=>y.ToList());
}
}
公共课武馆
{
公共日期时间TakenDate{get;set;}
公共int-UerID{get;set;}
公共字符串TakenItem{get;set;}
公共双TakenValue{get;set;}
}

}
我会找到最新的日期:

var latestDate = items.Select(i => i.TakenDate).Max();
然后通过筛选具有该日期的项目:

var itemsWithLatestDate = items.Where(i => i.TakenDate == latestDate).ToList();
如果您要求按日期顺序将它们分组,则:

var itemsByDate = items.GroupBy(i => i.TakenDate).OrderBy(g => g.Key);
最新日期组将是这些组中的最后一个:

var itemsWithLatestDate = itemsByDate.Last();
我想根据TakenDate将它们分组到单独的列表中

您可以使用
GroupBy()
LINQ查询运算符按
TakenDate
分组,并按如下方式枚举结果:

var groups = TakenBMIList.GroupBy(x => x.TakenDate);

foreach (var group in groups)
{
    Console.WriteLine("TakenDate: {0}", group.Key);

    List<TakenBMI> list = group.ToList(); //List of TakenBMI with current TakenDate
}
var latestTakenBMIs = TakenBMIList.Where(x => x.TakenDate == TakenBMIList.Max(y => y.TakenDate)).ToList();

到目前为止你试过什么?我建议你也看看,TakenDate是约会时间吗?是的,TakenDate是约会时间。我尝试过这样的方法:var q=from n in TakenBMI group n by n.TakenDate to g select g.OrderByDescending(t=>t.TakenDate).FirstOrDefault();var m=从TakenBMI组n中的n通过n.TakenDate转换为g选择新的{TakenDate=Convert.ToDateTime(q)};你能不能加上你在m中得到了什么,这样我们就不必自己运行了???我想这应该类似于先找到最大日期,我会试试这个。非常感谢。