C#Linq问题:如何识别和计算集合中的项目

C#Linq问题:如何识别和计算集合中的项目,第1张

概述我有一个朋友正在使用c# Linq来报告下表: varchar(50) namedatetime when 客户希望选择要汇总的列,例如今年的总计,去年的总计,两周前的总计等.每列将有一些开始和结束时间,他们用计数汇总.我为他做了一个快速选择声明: select A.name as [Name], (select count(*) from mytable B where A.n 我有一个朋友正在使用c# Linq来报告下表:

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问题:如何识别和计算集合中的项目所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1212752.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存