varchar(50) namedatetime 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 endDatevar groups = mytable.GroupWithinDates( A => A.name,A => A.when,startDate,endDate)// You can then transform to name and Countvar groupCounts = groups.Select(g => new {name = g.Key,Count = g.Count()};总结
以上是内存溢出为你收集整理的C#Linq问题:如何识别和计算集合中的项目全部内容,希望文章能够帮你解决C#Linq问题:如何识别和计算集合中的项目所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)