C#Linq问题:如何识别和计算集合中的项目
发布时间:2020-12-16 09:26:36 所属栏目:百科 来源:网络整理
导读:我有一个朋友正在使用c# Linq来报告下表: varchar(50) namedatetime when 客户希望选择要汇总的列,例如今年的总计,去年的总计,两周前的总计等.每列将有一些开始和结束时间,他们用计数汇总.我为他做了一个快速选择声明: select A.name as [Name],(select co
我有一个朋友正在使用c#
Linq来报告下表:
varchar(50) name datetime when 客户希望选择要汇总的列,例如今年的总计,去年的总计,两周前的总计等.每列将有一些开始和结束时间,他们用计数汇总.我为他做了一个快速选择声明: select A.name as [Name],(select count(*) from mytable B where A.name = B.name and datepart(yy,when) = datepart(yy,getdate())) as [This Year],(select count(*) from mytable B where A.name = B.name and datepart(yy,when) = (datepart(yy,getdate()) - 1)) as [Last Year] from (select distinct name from mytable) A 我还建议他将每个计算字段设为一个委托,这样他就可以在查询之外包含计算混乱.假设每个委托都有一个开始和结束日期,计算每个不同名称的命中数,那么任何人都想要了解Linq c#代码的样子? 解决方法
这是一个通用方法,可以与任何表和日期字段一起使用,并返回可以计数的组.对于您想要数据的每个日期范围,您必须多次运行它.
static IQueryable<IGrouping<TKey,TSource>> GroupWithinDates<TSource,TKey>( this IQueryable<TSource> source,Expression<Func<TSource,TKey>> keySelector,DateTime>> dateSelector,DateTime startDate,DateTime endDate ) { return source .Where(item => dateSelector(item) >= startDate && dateSelector(item) < endDate) .GroupBy(keySelector) } // Usage after setting startDate and endDate var groups = mytable.GroupWithinDates( A => A.name,A => A.when,startDate,endDate) // You can then transform to Name and Count var groupCounts = groups.Select(g => new {Name = g.Key,Count = g.Count()}; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |