星空网 > 软件开发 > ASP.net

EF架构~为分组添加位运算聚合方法

回到目录

我们知道在Linq里的分组groupby可以对集合中一个或者多个字段进行分组,并对其中一个属性进行聚合,而Linq为我们提供了多种聚合方法,由aver,sum,count等,而在大叔权限体系中,以上几种聚合是不够的,因为我们需要对权限字段进行按位聚合,或者说对它进行按位的或运算,这对于学过计算机基础的同学不是什么难事,按位求或,就是将数值先转为二进制,进行两个运算数进行求或,原则是:有1则1,全0才0,这是上学时老师教的,呵呵。

对于Linq的扩展方法微软开发人员都放在了System.Linq这个命名空间下面,所以咱们自己写扩展时,也最好遵循这个原则,都写在这个命名空间下,这样在使用时也很方便,因为VS建立项目后,在config里会自己引用这个命名空间,在开发效率上是很高高的。

微软为我们封装的一些集合的扩展方法

namespace System.Linq{  // 摘要:  //   提供一组用于查询实现 System.Collections.Generic.IEnumerable<T> 的对象的 static(在 Visual  //   Basic 中为 Shared)方法。  public static class Enumerable  {        public static TSource Aggregate<TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func);        public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func);        public static TResult Aggregate<TSource, TAccumulate, TResult>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector);        public static bool Any<TSource>(this IEnumerable<TSource> source);        public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

大叔照着葫芦去画飘

     /// <summary>    /// 按或进行位运算    /// 作者:仓储大叔    /// </summary>    /// <typeparam name="TSource"></typeparam>    /// <param name="source"></param>    /// <param name="selector"></param>    /// <returns></returns>    public static int BinaryOr<TSource>(this IEnumerable<TSource> source, Func<TSource, int> selector)    {      int result = 0;      foreach (var item in source)      {        result |= selector(item);      }      return result;    }

在实现中使用时,与sum方法是一样的,只不过sum是对数值进行求和,而BinaryOr是对数值按位求或,这两者在运算结果上是完全不同的,如下所示

都是1,2,4,4,2,1进行求聚合

Sum()的结果:14

BinaryOr()的结果:7

对于按位运算的实际意义:它在Flags标识的枚举上经常使用(枚举元素值为2的N次幂),像在大叔框架里的权限部分,也是使用了这种枚举进行存储的。

回到目录




原标题:EF架构~为分组添加位运算聚合方法

关键词:架构

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

企业抢注“火神山”“雷神山”商标 律师:涉嫌违法:https://www.ikjzd.com/articles/116625
亚马逊账号被封该如何进行申诉?:https://www.ikjzd.com/articles/116626
亚马逊卖家如何规避被收取FBA长期仓储费?:https://www.ikjzd.com/articles/116627
Shopee开辟新市场—巴西市场开放!:https://www.ikjzd.com/articles/116628
声音|做虾皮Shopee,大概率会交的 “智商税”:https://www.ikjzd.com/articles/116629
社交媒体营销真的很简单!:https://www.ikjzd.com/articles/11663
去日本入住酒店,东西随意用却有一个特殊“要:https://www.vstour.cn/a/411241.html
中国有哪些著名的酒店品牌。:https://www.vstour.cn/a/411242.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流