C#
文章平均质量分 55
xiaoqiu_net
学无先后,达者为师。
展开
-
DTO数据传输对象、AutoMapper了解(一)
在web应用程序中,我们通常把系统结构分为三层/多层。其中Model层存放我们的实体类.UI层,业务逻辑层,数据访问层均引用了Model层.在前台页面发送一个http请求,后台处理后返回相应的json数据.也就是对应的实体..比如EF中的Model,都是根据业务逻辑来建立的实体类,也可以称为是业务对象模型(领域模型)。那么在这里DTO又有什么作用?DTO:(原创 2016-07-26 16:55:23 · 4335 阅读 · 0 评论 -
C# 逆变、协变
最近看的一些框架,很多封装的泛型委托/接口中,都有写in和out,了解了这块,逆变和协变。自定义委托: //协变:out对于泛型参数类型 标识:该类型是协变的 public delegate TResult FuncOut(); //逆变:in对于泛型参数类型 标识:该类型参数是逆变的 public delegate TResult FuncIn();测试原创 2016-09-08 13:51:59 · 321 阅读 · 0 评论 -
观察者模式
观察者模式:定义了一种一对多的依赖关系,一个对象的行为引发多个对象的行为.让多个观察者绑定一个通知者。当通知者的状态发生变化时候,会通知所有注册到通知者里面的观察者,使他们能够自动更新自己。它是行为模式的一种,解决了具有一对多依赖关系的对象的重用问题。以Socket通信为例,多个客户端绑定服务器IP和端口,注册到服务端中,那么服务器端与客户端就是一对多的关系。(观察者和通知者互相依赖)原创 2016-09-08 15:03:16 · 358 阅读 · 0 评论 -
C#读取Excel文件
之前读取Excel用的NPOI,返回List,操作起来很方便。但是数据量一大,就很慢,还出现内存不足的异常。 public List Read(string path, string sheetName = "", bool isFirstRowColumn = true) { var list = new List();原创 2017-02-28 11:45:09 · 420 阅读 · 0 评论 -
linq对数据集多个字段进行分组
linq有两种方式对一个数据集合进行分组1.直接传递匿名类型personList.groupBy(p=>{p.Age,p.Sex})2.如果遇到一个不支持创建匿名对象来多字段进行分组的,比如System.DataRowProductAttrsTable.AsEnumerable().GroupBy(g=>g.CategoryID).SelectMany(g=>g.G原创 2017-02-24 17:02:45 · 8031 阅读 · 0 评论 -
.NET后台接收Json数据,序列化到指定实体类
请求数据如下:使用Newtonsoft.Json来序列化,实体类定义:public class InputBase { /// /// 时间戳 /// [JsonProperty("timeStamp")] public string TimeStamp { get; set; }原创 2017-11-20 11:29:22 · 1161 阅读 · 0 评论 -
HttpClient异常:ProtocolViolationException
使用HttpClient进行Get请求的时候,发生了这个异常:ProtocolViolationException,无法发生具有此谓词类型的内容正文。代码如下: var reqMsg = new HttpRequestMessage { Method = httpItem.Method,原创 2018-01-10 16:39:09 · 3261 阅读 · 0 评论 -
Newtonsoft.Json序列化DateTime类型数据为字符串时候,带了一个T
字段:public DateTime ApplyDate {get;set;}序列化字符串后,值变成了"2018-02-05T00:00:00"序列化时候 需要更改一下日期转换方式:IsoDateTimeConverter timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss原创 2018-02-05 14:06:15 · 7526 阅读 · 0 评论 -
C# 操作redis
1.安装redis操作工具包,ServiceStack.Redis。2.在App.config/web.config配置Redis信息 <configSections> <section name="RedisConfig" type="redisDemo.redis.RedisConfig,redisDemo" /> </configSections&...原创 2018-03-20 15:16:23 · 2003 阅读 · 1 评论 -
ASP.NET MVC、WebApi 设置返回Json为小驼峰命名
在ASP.NET MVC中,我们一般返回json数据,直接return Json(data)就可以了,但是C#字段命名规范是首字母大写,返回Json的时候就是直接序列化了指定的实体对象,就是大写了。这里自己创建一个JsonResult,继承JsonResult,重写一下ExecuteResult方法,利用Newtonsoft.Json格式化一下数据,再自定义写回到请求中。 public cl...原创 2018-05-02 18:01:54 · 6012 阅读 · 0 评论 -
linq to sql 动态拼接条件
遇到了一个比较特殊的查询(表没有设计好,也就是加一个字段能解决了),才发现了linq to sql 还可以这样的去动态的拼接where条件,不然也不会这样写,这里记录一下,代码如下: from bill in list join invoice in _invoiceAppService.Query() on bill.BillNo equals invoice.Bi...原创 2018-05-09 16:43:17 · 2995 阅读 · 1 评论 -
C# AutoMapper 利用特性进行实体间的映射
AutoMapper:6.2.2.0案例:UserDto和User实体之间的映射(User类除了Name拥有更多字段) [AutoMap(typeof(User))] public class UserDto { public string Name { get; set; } }最后直接使用:var userDto = userService.Find("0...原创 2018-04-26 19:04:31 · 6511 阅读 · 3 评论 -
Autofac-ASP.NET MVC、WebApi 使用
1.安装Autofac包和Autofac.Integration.Mvc包,在global中进行注入: var builder = new ContainerBuilder(); //注册所有Controller builder.RegisterControllers(Assembly.GetExecutingAssembly(...原创 2018-04-27 19:23:59 · 494 阅读 · 0 评论 -
C# 队列Queue的使用
今天用到的C#内置的Queue队列来进行重试机制。基本的用法就是入队列:Enqueue、出队列:Dequeue接口拉取数据,接口可能不稳定会拉取失败,我将失败的记录存入了Queue然后进行重试,直到全部成功为止。Queue errorQueue = new Queue();//将所有失败的记录都存入队列errorQueue.Enqueue(param.PageNo);//然后进行重试,直到...原创 2018-06-21 21:46:57 · 8547 阅读 · 0 评论 -
工厂模式
工厂模式,一种抽象程序设计思想,面向接口(抽象)编程,降低模块间的耦合度、使程序有更好的扩展性,灵活变化。开发程序的一种思想:“模块内高内聚,模块间低耦合”。这里简单总结一下自己了解到的抽象工厂。在我们最初接触到的三层架构,三层是紧紧的强耦合在一起的,UI->BLL->DAL,如: public AccountDAO dao; public Accou原创 2016-09-05 22:40:20 · 342 阅读 · 0 评论 -
C#内置的几种委托详解,lambda表达式的演变
系统内置的委托 使用委托:方法的签名要和委托一致。 1.System.Func 代表有返回类型的委托 |--public delegate TResult Func(); |--public delegate TResult Func(T tag); 注:输入泛型参数-in最多16个,输原创 2016-08-26 10:43:15 · 1347 阅读 · 0 评论 -
解决IIS对COM组件的访问异常
在C#操作word或者Excel,我们可能会用到微软内置的COM组件,会出现很多问题。如:在本地调试导出Excel没有问题,发布到IIS就有问题了,检测到的异常:我们会发现在iis上运行的程序,没有打开word的进程。因为你vs是管理员权限,而iis没有权限。所以这要提高iis的权限。启动IIS,应用程序池-“选定的应用程序池”-高级设置-进程模拟-标识:选择自原创 2016-09-03 09:27:06 · 7257 阅读 · 0 评论 -
管道模式
今天接触了管道模式,在这里总结一下自己的理解。不足之处请各位多多指教在软件中,我们会遇到三个词,就是流、管道和过滤器。我认为:流:数据管道:数据传输的通道(载体)过滤器:过滤掉在管道中不符合要求的数据原始数据经过管道传输到另一端产生最终数据。在生活中,好比 原水经过管道(一层层的过滤,沉淀、去杂质、消毒)到管道另一端形成了纯净水。在系统中,我们经常会根据业务逻辑对一原创 2016-07-28 16:06:27 · 4007 阅读 · 0 评论 -
C#利用内置的word五大对象操作word文档
public class WordHelper { ApplicationClass app = null; //定义应用程序对象 Document doc = null; //定义 word 文档对象 public void OpenDocument(strin原创 2016-08-01 21:53:23 · 4152 阅读 · 0 评论 -
C# yield关键字 操作集合
C#中yield的关键字几乎没有见过,今天用了一下,感觉很不错。他是一个语法糖,直接将集合中满足条件的数据返回给调用者,提高性能。直接上例子: static void Main(string[] args) { string[] strs = new string[] { "3", "5", "7", "9" }; foreach (...原创 2016-08-02 15:52:35 · 459 阅读 · 0 评论 -
装饰模式
装饰模式:动态给的类添加新的功能。通常给类添加功能,是通过继承的方式实现,但如果需求多了,写的子类就太多了,会出现“子类爆炸”问题。如:new PhoneCover(new PhoneSticker(new xxx...(stick)));一层层包装。C#代码示例:namespace 装饰模式Decorator{ class Program { s原创 2016-09-08 22:43:12 · 246 阅读 · 1 评论 -
使用"静态 static"需要注意
静态,static 看似一个很小很简单的东西,不注意使用可能会变成一个很大的坑.定义static变量需要考虑的因素:1.对象的生命周期:static变量在内存中存一份,也可以叫为静态共享。声明static的变量在内存中一直存在,除非IIS服务器重启,或者手动回收。2.访问/操作是否会冲突:在多线程的环境下必须考虑到(后一个操作会不会覆盖前一个人的)。很多时候,我们自己开发原创 2016-08-08 14:19:36 · 1468 阅读 · 0 评论 -
建造者模式
namespace 建造者模式{ /* 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示*/ class Program { static void Main(string[] args) { ConcreteBuilder builder = new ConcreteBuilde原创 2016-09-11 15:58:57 · 273 阅读 · 0 评论 -
C#动态构建lambda表达式(一)
lambda表达式就是从委托进化来的,书写方便。形如:p=>p.Name其中p叫做表达式参数,p.Name成为表达式体body.动态构建lambda表达式,满足以上条件就好了. public LambdaExpression GetLambdaExpression(string propertyName) { //1.创建表达式原创 2016-08-10 10:29:01 · 5111 阅读 · 0 评论 -
EF封装基础的数据操作后DbContext的问题,需保证上下文唯一。
使用EF操作数据库,我们会进行一个封装,将DbContext(数据库操作上下文类)提取出来,以便复用。 public class BaseDBContext: DbContext { public BaseDBContext() : base("name=xxSysEntities") { } }然后建立基本的仓储,封原创 2016-08-31 13:51:39 · 11632 阅读 · 0 评论 -
MVC动态获取树形菜单信息
菜单效果如图:后台递归得到菜单树代码: /// /// 获取菜单树 /// /// 菜单父节点ID /// public IEnumerable GetList(string ParentID) { var list = Query(m => m.Par原创 2016-08-10 14:07:30 · 8410 阅读 · 3 评论 -
MVC接收前台json数据,反序列化为指定实体对象
前台我们一般用ajax来发送数据到后端进行处理,如果json数据结构和后台的实体类结构一致,就直接可以反序列化为指定的对象进行操作,非常方便。前端发送的json数据结构:后端实体结构: public partial class Cures { public string CureID { get; set; } public str原创 2016-08-10 14:25:37 · 5650 阅读 · 0 评论 -
C# 爬虫,抓取网页数据
这两天学习了爬虫的基础,这里简单总结一下。抓取到的网页商品数据,存入Excel表格,效果如下:使用的是 Jumony Core这个引擎,非常强大,近乎完美的HTML解析引擎,支持css3选择器,直接抓取网页文档分析,并根据HTTP头自动识别。抓取博客园站点导航顶端信息示例:var documents = new JumonyParser().LoadDocument("原创 2016-09-01 11:11:03 · 10974 阅读 · 4 评论 -
C#读取XML文件,反序列化为指定对象
Xml序列化帮助类: public class XmlSerializeHelper { public static string Serialize(T obj) { return Serialize(obj, Encoding.UTF8); } /// /// 实体对象原创 2016-09-01 15:41:37 · 8318 阅读 · 1 评论 -
C#利用NPOI导出Excel-ASP.NET MVC示例
Excel结构:工作薄.xls->工作表sheet->单元格Cell.使用NPOI导出Excel速度挺快。微软内置的COM组件,需要依赖office,而且发布到IIS权限配置很麻烦。而且效率较低。NPOI导出Excel主要C#代码:写入Excel文件类:public static class XlsWriter { public static IWork原创 2016-08-23 16:31:08 · 3148 阅读 · 0 评论 -
C# IQueryable和IEnumerable的区别
在使用EF查询数据的时候,我们常用的查询数据方式有linq to sql,linq to object,查询返回的结果有两种类型:IQueryable、IEnumerable,两者内部的处理机制是完全不同的。清楚认识,这里也是一个数据查询的优化点。在System.linq命名空间,有两个静态类:Queryable和Enumerable.在System.linq.Queryabl原创 2016-08-24 11:14:34 · 17992 阅读 · 0 评论 -
NPOI导出Excel添加单元格验证:下拉框,数字
需求描述:数据导出到Excel,新增对单元格的数据校验。如图:1、设置验证,首先要选择单元格的范围CellRangeAddressList cellRegions = new CellRangeAddressList(1, 65535, 1, 1); 范围表示:选择第2行到第65535行,第二列2、创建约束constraintXSSFDataValidationH...原创 2018-07-18 10:38:04 · 5236 阅读 · 0 评论