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 = ;
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架构~为分组添加位运算聚合方法的更多相关文章
- 【转】Cocoa中的位与位运算
转自:http://www.tuicool.com/articles/niEVjy 介绍 位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常 ...
- Python语言中的按位运算
(转)位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加 ...
- LeetCode通关:求次数有妙招,位运算三连
分门别类刷算法,坚持,进步! 刷题路线参考: https://github.com/chefyuan/algorithm-base 大家好,我是刷题困难户老三,这一节我们来刷几道很有意思的求次数问题, ...
- Java中的二进制及基本的位运算
Java中的二进制及基本的位运算 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借位规则是"借一当二 ...
- leetcode 231 Power of Two(位运算)
Given an integer, write a function to determine if it is a power of two. 题解:一次一次除2来做的话,效率低.所以使用位运算的方 ...
- POJ 1166 The Clocks [BFS] [位运算]
1.题意:有一组3*3的只有时针的挂钟阵列,每个时钟只有0,3,6,9三种状态:对时针阵列有9种操作,每种操作只对特点的几个时钟拨一次针,即将时针顺时针波动90度,现在试求从初试状态到阵列全部指向0的 ...
- [LeetCode]78. 子集(位运算;回溯法待做)
题目 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], ...
- C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序
C#中缓存的使用 缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可: <%@ Outp ...
- EF架构~为EF DbContext生成的实体添加注释(T5模板应用)
回到目录 相关文章系列 第八回 EF架构~将数据库注释添加导入到模型实体类中 第二十一回 EF架构~为EF DbContext生成的实体添加注释(T4模板应用) 第二十二回EF架构~为EF DbCo ...
随机推荐
- C# 通过身份证查询出生日期
private int GetAgeBycode(string b_car_code) { string birthday = ""; //处理18位的身份证号码从号码中得到生日和 ...
- 19. UIAlertController 提示框获取文本内容,打印控制台上
1.首先定义一个全局字符串变量,方便接收获取的文本内容 2. -(void)viewDidAppear:(BOOL)animated{ UIAlertController * alert = [UIA ...
- python 使用字符串名调用类以及调用类方法名
在python中,有时调用者仅知道类名和类方法,不负责实际的函数调用,而是将要调用的类名和类方法告诉一个中间函数,由中间函数负责实际调用函数.中间函数需以被告知的字符串调用类和类方法. ...
- Height Half Values
public class HeightDemo { /** * 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半: * 再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? * ...
- Linux网关配置(centos6)
1.找寻本地机器网关的位置,点击红圈位置 打开后样式 2.双击点开打开网络和共享中心,找到查看活动网络---->点击右边的本地连接 3.点击详细信息 4.查看如下 5.对照配置,进入linux命 ...
- mysql删除开放用户权限
来访用户ODBC 1,在本地的cmd中用root用户进入mysql2,创建一个ODBC的用户create user 'ODBC'@'localhost';查看用户是否创建成功select user,h ...
- (转)Java中的static关键字解析
转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...
- 好文推荐系列---------JS模板引擎
这篇文章写的很清晰,不再赘述,直接上链接:http://www.tuicool.com/articles/aiaqMn
- SAS 画折线图PROC GPLOT
虽然最后做成PPT里的图表会被要求用EXCEL画,但当我们只是在分析的过程中,想看看数据的走势,直接在SAS里画会比EXCEL画便捷的多. 修改起来也会更加的简单,,不用不断的修改程序然后刷新EXCE ...
- c#dataGridView奇偶数行变色
dataGridView_Performance.RowsDefaultCellStyle.BackColor = Color.Bisque; dataGridView_Performance.Alt ...