当前位置: 首页 > 编程语言 > C#

C#Linq或Lambda表达式按周列出带有日期字段的IEnumerableshare

时间:2023-04-11 11:28:32 C#

姓名、日期开始、ID)我有IEnumerable,我想制作一份按周分组的报告。例如:第1周Project18/4/2013ID1Project29/4/2013ID2第2周Project116/4/2013ID3Project218/4/2013ID5第3周Project124/4/2013ID7Project226/4/2013ID8如果有人能帮助我,我将不胜感激!我正在尝试做一个lambda表达式但没有成功。谢谢!varweekGroups=projects.Select(p=>new{Project=p,Year=p.DateStart.Year,Week=CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(p.DateStart,CalendarWeekRule.FirstFourDayWeek,DayOfWeek.Monday)}).GroupBy(x=>new{x.Year,x.Week}).Select((g,i)=>new{WeekGroup=g,WeekNum=i+1,Year=g.Key.Year,CalendarWeek=g.Key。星期});foreach(varprojGroupinweekGroups){Console.WriteLine("Week"+projGroup.WeekNum);foreach(projGroup.WeekGroup中的varproj)Console.WriteLine(“{0}{1}{2}”,proj.Project.Name,proj.Project.DateStart.ToString(“d”),proj.Project.ID);}您需要定义一个可以确定日期所在周的函数:intGetWeek(DateTimedate){...}那么对组的LINQ查询是:IEnumerable>groupedProjects=myListOfProjects.GroupBy(p=>GetWeek(p.DateStart));您可以遍历分组项目列表:foreach(varweekGroupingroupedProjects){intweek=weekGroup.Key;foreach(varprojectinweekGroup){Console.WriteLine("Week"+week+"|Project:"+project.ID);}}我认为要简化此任务,您可以将WeekNumber属性添加到Project类并在创建Project的对象后填充它,之后您可以轻松地按WeekNumber属性Project(Name,DateStart,ID,WeekNumber)进行分组我认为这很简单projectionwilldo://我们将只使用盒子上的现有设置。DateTimeFormatInfodfi=DateTimeFormatInfo.CurrentInfo;varcal=dfi.Calendar;varProjects=GetProjectsFromSomewhere();//假设IEnumerableintweek=1;//这个*可以*被更改并投影到Select中。foreach(varwginfrompinProjectsgrouppbycal.GetWeekOfYear(p.StartDate,dfi.CalendarWeekRule,dfi.FirstDayOfWeek)){Console.WriteLine("Week{0}",week);foreach(varpinwg){Console.WriteLine("{0}{1}{2}",p.Name,p.StartDate,p.ID);周++;您可以使用此处发布的GetWeekOfMonth扩展:然后执行以下操作:vargroups=projects.GroupBy(p=>p.Start.GetWeekOfMonth());foreach(vargroupingroups){Console.WriteLine("Week{0}",group.Key);foreach(varprojectingroup){Console.WriteLine("t{0}|{1:dd/MM/yyyy}|{2}",project.Name,pr项目.开始,项目.Id);除了TimSchmelter的回答之外,您还可以获取一周第一天的日期,然后按该日期进行分组以获得一周第一天的日期。您可以使用此代码:if(diff那么可以这样按第一周分组:上面是C#学习教程:C#LinqorLambdaexpressionslisttheIEnumerablelistbyweek,datefield共享的所有内容。如果对大家有用并且需要了解更多的C#学习教程,希望大家多多关注---varweekGroups=projects.Select(p=>new{Project=p}).GroupBy(x=>x.Project.DateStart.StartOfWeek(DayOfWeek.Monday)).Select((g,i)=>new{WeekGroup=g,WeekNum=i+1});foreach(varprojGroupinweekGroups){Console.WriteLine("Week"+projGroup.WeekNum复制代码);foreach(varprojinprojGroup.WeekGroup)Console.WriteLine("{0}{1}{2}",proj.Project.Name,proj.Project.DateStart.ToString("d"),proj.Project.ID);}本文采集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明出处:

最新推荐
猜你喜欢