分类: .Net

实用的Mongodb官方驱动辅助扩展方法

因为实测使用Lambda表达式查询的效率并不比标准Api差,所以我希望尽可能地使用Lambda表达式来完成Mongodb的查询工作。 这些扩展方法能够实现便捷的Lambda查询,例如: c.Find(q => !q.性别 && q.身高 > 1.8 && q.存款 > 5000) 当然有些地方还是会需要用到标准Api的,这里也为多条件过滤式查询提供了更方便的调用方式: c.Find(Query<数据>.EQ(q => q.性别, false), Query<数据>.GTE(q => q.身高, 1.8)) 另外也对Javascript代码方式的查询调用方式做了优化,这也是很常用的使用方式,适合于在后台让管理员自定义查询代码进行查询: c.Find(“this.性别==false&&this.身高>=1.89&&this.生日.getFullYear()>=1995”) 但须注意,Javascript使用的是$where方式查询,速度比较慢,上述查询在10万条...

更多

在MongoDB官方驱动中使用含有Decimal类型属性数据时的注意事项

MongoDB中没有Decimal所对应的类型,并且Decimal目前也还不受MongoDB官方驱动(当前为1.10.0-rc0 (预发行版))支持,默认序列化时会把其存为字符串类型数据,这意味着性能损耗,且不支持Inc形式的更新。 找了一下相关资料,有人提出了一种解决办法,但他这是针对仅保留2位小数的价格属性而制定的,并且在当前版本MongoDB官方驱动中测试并未成功。 当下的权宜之计还是把它当做Double类型来处理,即为属性附加此特性: [BsonRepresentation(BsonType.Double, AllowTruncation = true)] 关于其中AllowTruncation的解释请参看我之前的博文。 分享或转载本博客站点内的所有原创内容时,都必须遵循此协议: 姓名标示-非商业性-相同方式分享 4.0 国际 (CC BY-NC-SA 4.0) 同时必须附加指向本文页面或本博客首页的超链接。 除此之外的转载、分享方式都必须征得本博客作者的授权,否则将会诉诸法律。

更多

比较全面的MIME类型(ContentType)映射枚举代码

对MIME类型做了整理,为了使用方便而写成了一个枚举,在此分享一下,这在网络编程中很实用。 此枚举描述了约有470多种文件类型与MIME类型的对应关系,通过一个扩展方法获取其对应的MIME值。 枚举主体代码: /// <summary> /// 文件类型枚举,可以通过GetDescription扩展方法获取其对应的MIME类型。 /// </summary> public enum 文件对应MIME类型 { /// <summary> /// 扩展名.323的文件,对应ContentType(MIME)类型:text/h323 /// </summary> [Description(“text/h323”)] _323, /// <summary> /// 扩展名.3gp的文件,对应ContentType(MIME)类型:video/3gpp /// </summary> [Description(“video/3gpp”)] _3gp, /// <summary> /// 扩展名.aab的文件,对应C...

更多

WF继承AsyncCodeActivity时遭遇InvalidOperationException的解决方法

未处理System.InvalidOperationException  HResult=-2146233079  Message=AsyncCodeActivity.BeginExecute 必须返回 IAsyncResult,且其 IAsyncResult.AsyncState 必须为运行时提供的状态对象。  Source=System.Activities  StackTrace:       在 System.Activities.WorkflowApplication.Invoke(Activity activity, IDictionary`2 inputs, WorkflowInstanceExtensionManager extensions, TimeSpan timeout)       在 System.Activities.WorkflowInvoker.Invoke(Activity workflow,...

更多

MongoDB官方驱动多种查询方式性能对比测试

近日在这篇博文中我和那位博主进行了一些探讨,焦点在于这样一种查询的写法: return collection.FindAs<Log>(query).Where(l => l.CreateTime < lasttime).OrderByDescending(l => l.CreateTime).Take(pagesize).ToList(); 我承认起先我甚至都不知道MongoDB官方驱动有对Linq的部分支持,貌似我之前看的教程都是针对官方驱动的早期版本的,从没有看到一篇文章提过官方驱动的Linq功能~至多有写过第三方驱动支持Linq的…… 不过官方Linq例子中也并不是这样书写的,以下为官方示例: var result = collection.AsQueryable<C>() .Where(c => c.X == 1) .Count(); 注意第二行,官方是先对集合进行AsQueryable<C>()转换后才使用Linq查询的。 而那位博主是在用官方的标准查询方法之后再继续通过Linq实现排序和限制传回数据量(以及另一处的...

更多

Visual Studio 2013 灵异的窗体设计器显示BUG

首先贴出我的Visual Studio版本: 在上文通过NuGet控制台在解决方案中的一个WinForm项目中安装了两个程序包之后,编写了一些代码,然后发现窗体设计器不能用了,提示: 文件中的类都不能进行设计,因此未能为该文件显示设计器 非常操蛋的是此时编译和运行都正常,而新建Form也是同样情况,无法设计,无论怎么清理、编译、重新编译、重新打开解决方案、重新打开程序、清理内存都无解,真塌妈神了。 要说还有什么蹊跷之处,那就是部分代码中的智能感知和代码提示、代码着色失效了,但我搞不明白为什么这是局部失效,事实上差不多只有一个方法内的一部分类型的代码失效了。 网上搜罗了一下各种类似错误的解决方法,都不适用。 这种操蛋情况完全无法用常理解释了,我尝试反向操作: 注释掉新增的代码并重新编译——没用 卸载掉一个NuGet程序包并重新编译——没用 再卸载掉另一个NuGet程序包并重新编译——好了! 设计器复活了! 卧槽,这是dll的事!?不得而知 接着再尝试正向操作,看看问题出在哪一环节: 安装一个NuGet程序包并重新编译——没事 安装另一个NuGet程序包并重新编译——没事 取消注释新增的代...

更多

Visual Studio 2013 中 NuGet 的“无法初始化 PowerShell 主机”错误

坑爹的NuGet,又慢又爱出错,今天遇到此错误: 无法初始化 PowerShell 主机。如果您的 PowerShell 执行策略设置设为 AllSigned,请先打开程序包管理器控制台以初始化该主机。 看各处说解决办法都是使用管理员权限运行PowerShell 输入命令: Set-ExecutionPolicy AllSigned 或者: Set-ExecutionPolicy AllSigned 直接这样是不管事的,重启也不管事,应该在这之后打开程序包管理器控制台: 这时候应该就初始化完毕了,可以尝试再去安装程序包了,不过我懒得弄了,直接命令行安装了,以Microsoft HTTP Client Libraries为例,直接输入下面的代码即可: Install-Package Microsoft.Net.Http 又测试了一下,依然无法用正常方法安装,真垃圾,看来以后都只能采用控制台的方式安装了。 关于每个程序包的安装代码,可以通过其识别码页面获取: 分享或转载本博客站点内的所有原创内容时,都必须遵循此协议: 姓名标示-非商业性-相同方式分享 4.0 国际 (CC BY-NC-SA...

更多

关于MongoDB官方驱动的“元素不匹配目标类型的任何字段或属性”异常

Element ‘支付订单编号’ does not match any field or property of class MongoModels.交易记录. 说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息: System.IO.FileFormatException: Element ‘支付订单编号’ does not match any field or property of class MongoModels.交易记录. 异常信息范例如上文,具体情况是: 储值变化记录 类是个抽象类。 数据库的 储值变化记录 集合中存储着各种 储值变化记录 类的子类。 交易记录 类隶属于 储值变化记录 的子类。 早先的系统中运行一切正常,然而当新增了 支付工费记录 类并且存入数据库后,在查询 交易记录 类型数据时就出现了上述错误。 支付工费记录 类同样隶属于 储值变化记录 的子类,其包含上文错误提示中的 支付订单编号 属性。 这个问题原因很简单,就是因为...

更多

WF快速生成设计器XAML代码的方法

工作流WF的设计器XAML代码写起来很蹩脚,基本上每次都得从之前的其他设计器xaml文件中复制代码过来再修改,这样很麻烦也很容易出错,这里介绍一个使用RegeX3实现快速转换属性为设计器XAML代码的方法。 首先新建一个WorkFlow代码活动: 然后进行编写,编写后假设我们的属性代码是这样的: [RequiredArgument] public InArgument<Bitmap> 处理目标 { get; set; } [RequiredArgument] public InArgument<Int32> 最小宽度 { get; set; } [RequiredArgument] public InArgument<Int32> 最小高度 { get; set; } 注意:不要使用int、float这类的C#关键字做类型,因为其在XAML中不受支持,要使用它们的真实类型名称Int32、Single等。 将其全部复制,打开RegeX3,粘贴入,然后执行如下的多步替换: 第一步 表达式 [RequiredArgument]s*rn 替换为 * 第二步 ...

更多

从博客园迁移到WordPress时的数据转换方法

因为受不了博客园的渣样管理团队,我决定离开博客园,建立独立博客,图个自由、清静、安生。 之前参考了这篇《将博客园(cnblogs.com)数据导入到wordpress》的方法,但是可能是版本变化,导致其会遇到以下错误,无法正常导入: Warning: Cannot set time limit with permission (max_execution_time = 120) in wp-content/plugins/cnblog/LvConfigUI.php on line 2 Warning: copy(/data1/www/htdocs/928/skydblog/1/wp-content/plugins/cnblog/database/201411031325407933.xml) [function.copy]: failed to open stream: Permission denied in wp-content/plugins/cnblog/LvUpThumb.php on line 69 Warning: chmod() [function.chmod]: Pe...

更多