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中得到了什么,这样我们就不必自己运行了???我想这应该类似于先找到最大日期,我会试试这个。非常感谢。