WEBAPI上传文件,读取 MIME 多节正文部分时出错。

                var multipartMemoryStreamProvider = await Request.Content.ReadAsMultipartAsync();


//默认只能接收4096KB的文件,超过这个大小的文件时便会报以下错误。

//Error reading MIME multipart body part


解决方案:

web.config:

<system.web>
   <!--允许请求长度,设置未1GB内容-->
   <httpRuntime targetFramework="4.5.1" maxRequestLength="1073741824" />
</system.web>

了解更多

MVC 中Html.TextBoxFor 如何实现 data-options属性与值格式化

Html.TextBoxFor(model => model.AreaName, new {@class="header", @data_options = "multiline:true", @data_date_format="yyyy/mm/dd"})

关键在于把 @data-options 写成 @data_options

@Html.TextBoxFor(model => model.StartDate, new { Value = String.Format("{0:yyyy-MM-dd}", Model.StartDate)})
@Html.TextBoxFor(model => model.StartDate,"{0:yyyy-MM-dd}", new { @class = "m-wrap small", @readonly = "true" })
@Html.TextBoxFor(model => model.StartDate, new { Value = Model.StartDate.ToString("yyyy-MM-dd")})
上面三种写法均正确,这里需要注意两点:
1、强制更改控件value属性,注意这个Value不能小写;
2、注意Model是System.Web.Mvc.WebViewPage<TModel>的属性,区别于Lamda表达式中model。
Model的定义public TModel Model { get; }
WebViewPage<TModel>继承自WebViewPage;
3、ModelState.Clear();清空model中的值,ModelState.Remove("XXX");清空某一个值。

举例:
<span>操作时间:</span>
           从 @Html.TextBoxFor(model => model.Query.BeginTime, new { Value = Model.Query.BeginTime.ToString("yyyy-MM-dd"), @class = "Wdate", onClick = "WdatePicker({dateFmt:'yyyy-MM-dd'});", style = "width:100px;" })
           到 @Html.TextBoxFor(model => model.Query.EndTime, new { Value = Model.Query.EndTime.ToString("yyyy-MM-dd"), @class = "Wdate", onClick = "WdatePicker({dateFmt:'yyyy-MM-dd'});", style = "width:100px;" })

了解更多

C# 用QQ企业邮箱发邮件

问题System.Net.Mail下的SmtpClient来发送邮件,而System.Net.Mail only仅支持Explicit SSL

不要465端口,用25,不用EnableSsl = true;

 

    {
        static void Main(string[] args)
        {
            SmtpClient client = new SmtpClient();
            client.Host = "smtp.exmail.qq.com";
            client.Port = 25;
           // client.Port = 465;
          //  client.EnableSsl = true;
            client.Timeout = 10000;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Credentials = new System.Net.NetworkCredential("test@ms.com", "1234567890");
            MailMessage mm = new MailMessage("test@ms.com", "user1@ms.com", "test", "test");
            mm.BodyEncoding = UTF8Encoding.UTF8;
            mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
            client.Send(mm);
        }
    }

 

最后在配置TFS邮件通知设置的时候端口改用25,不选择SSL,顺利解决问题。

SmtpClient发送邮件超时的异常参考:

http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx

了解更多

开源软件开发项目管理软件

最近总为项目怎么管理费脑筋,每个流程和细节都得记录和处理,所以结果就是找来了一些开源的、功能全的软件来了,做下记录,各位有什么不同软件推荐的也可以在博客留言讨论。

 

Redmine
Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统,据说是源于Basecamp的ror版而来,支持多种数据库,有不少自己独特的功能,例如提供wiki、新闻台等,还可以集成其他版本管理系统和BUG跟踪系统,例如SVN、CVS、TD等等。这种 Web 形式的项目管理系统通过“项目(Project)”的形式把成员、任务(问题)、文档、讨论以及各种形式的资源组织在一起,大家参与更新任务、文档等内容来推动项目的进度,同时系统利用时间线索和各种动态的报表形式来自动给成员汇报项目进度。

TeamLab

TeamLab 是一个免费开源的商业协作和项目管理的平台。TeamLab 主要功能包括:项目管理、里程碑管理、任务、报表、事件、博客、论坛、书签、Wiki、即时消息等等。

采用.net开发,目前版本6.5,编译、安装、部署与测试方法:

1、打开redistributable/asc文件夹,运行buildanddeploy.bat文件。2、根目录下会看到_ci文件夹下多出一个deploy文件夹3.进入到serverice文件夹下,运行TeamLabSvc.exe。4、一切完成后,打开IE,输入http://本机IP:8082,应该可以看到登录界面了。
5、修改默认端口可以在teamlabsvc.exe中进行配置

 

Endeavour Software Project Management

JAVA开发,(中文:奋进号项目周期管理系统)是一个功能丰富基于Web的软件项目管理工具。Endeavour适合用来管理大规模的迭代和增量企业系统软件项目,主要功能包括:用例管理、迭代开发、项目计划、需求变更管理、缺陷跟踪、测试用例、文档管理和其他功能等

Project-Open

project-open采用TCL开发的基于Web的项目管理系统,它能帮助你的业务涵盖领域,如客户关系管理,销售,项目规划,项目跟踪,协作,时间表,发票和付款等。

功能包括:

◆ 项目/方案
◆ 甘特图
◆ 项目模板
◆ 项目计划
◆ 项目跟踪
◆ 项目报告
◆ 风险管理
◆ 财政管理
◆ 时间表
◆ 项目管理
◆ 定购单
◆ 发票和付款
◆ 人力资源
◆ 雇员薪水表
◆ 查询管理
◆ 客户
◆ 新闻
◆ 讨论
◆ 聊天
◆ 维基
◆ 事物


Project.net

Project.net是一套强大、可扩展、可定制基于Web的项目管理系统,采用java开发,结构定的比较大


Plandora

Plandora 是一个需求变更和项目管理平台,采用甘特图进行任务计划,项目周期存储在知识库中


Onepoint Project

Onepoint Project代表了一类新的项目领导软件解决方案,不再让你在易用性和功能性的选择上左右为难。此外,它的不同的版本能满足您的需求和业务的规模。

功能和特点
减少项目风险:通过集成解决方案提高可用性
最小的项目管理工作:管理项目模板和团队
增加项目透明度:通过特设的监测,计划与实际的比较
大大减少成本:通过它减少风险和管理,而且增加透明度

 

 


eGroupWare Community

已经收费

 

zentaopms

国产开源的项目管理软件,资料很多


dotProject

DotProject是一个在1996年左右,基于Web,强大,小巧.被翻译为了大约40多种语言,应用于100多个国家, 只要能够跑AMP的OS,都可以(AMP指Apache,Mysql,PHP),它包含的模块有:公司管理,项目管理,任务进度跟踪(运用甘特图),论坛,文件管理,日历,通信 录,备忘录/帮助桌面,用户与模块的权限管理,主题管理。并采用模块化设计以便于扩展。

 

 最后,还推荐一些更多的文章,大家一起去研究下。

一个国外统计c#各类开源项目的网站:http://csharp-source.net/

国内有人统计的c#开源项目:http://alance.iteye.com/blog/693987

了解更多

C#开源项目介绍

一、AOP框架
        Encase 是C#编写开发的为.NET平台提供的AOP框架。Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式。这种部署方面(aspects)的方法帮助缺少经验的开发 人员提高开发效率。
        NKalore是一款编程语言,它扩展了C#允许在.net平台使用AOP。NKalore的语法简单、直观,它的编译器是基于Mono C#编译器(MCS)。NKalore目前只能在命令行或#Develop内部使用。NKalore兼容公共语言规范CLS(Common Language Specification),它可以在任何.NET开发环境中使用,包括微软的Visual Studio .NET。


        PostSharp读取.NET字节模块,转换成对象模型。让插件分析和转换这个模型并写回到MSIL。PostSharp使开发程序分析应用程序容易得 像分析代码规则和设计模式,它使程序开发的思想变革为面向方面软件开发(AOSD/AOD)思想。
        AspectDNG的目标是为.NET开发人员提供简单而功能强大的AOP-GAOP实现。它效仿java下的开源工具AspectJ 和 Spoon,成熟程度也很接近它们。
        RAIL(Runtime Assembly Instrumentation Library) 开源项目可以在C#程序集加载和运行前进行处理控制调整和重新构建。C#在CLR中,我们已经能够动态加载程序集并且获得程序集中的类和方 法,RAIL(Runtime Assembly Instrumentation Library)的出现填补了CLR处理过程中的一些空白


        SetPoint是一款.NET框架下的全功能(full-featured)AOP引擎.它着重为称为语义切点(semantic pointcuts)的定义依赖RDF/OWL的使用.它的功能为一个IL-level,highly dynamic weaver&LENDL,一个引人注目的定义语言、、、、、、
        DotNetAOP为 CLR language提供AOP 框架基础属性。
        NAop是一个DotNet下的AOP框架。
        AspectSharp是DotNet下的免费AOP框架,它以Dynamic Proxies和XML作为配置文件。
二、Ajax框架
        Ajax.NET Professional (AjaxPro)是最先把AJAX技术在微软.NET环境下的实现的AJAX框架之一。它在客户端脚本之上创建代理类来调用服务器端的方法。
        MagicAjax.NET是一款在ASP.NET下创建Web页面提供AJAX技术的框架。它使开发人员很容易把AJAX整合到他们的页面而不需要替换 ASP.NET控件或自己写javascript脚本代码。
        Anthem.NET是为ASP.NET开发环境提供的开源AJAX工具包,它可以运行于ASP.NET 1.1和2.0。
三、工作流(workflow)
        Workflow.Net是使用微软.Net技术基于wmfc标准的创建工作流引擎。
        NetBPM是JBpm移植到.net平台下的一款开源工作流软件。NetBpm可以很容易和.Net应用程序集成在一起,可以创建,执行和管理工作流程 序。
        Bpm Tool支持将业务模型转换成软件模型。业务开发人员可以使用模型驱动的方法设计,实现,执行和跟踪业务流程。因此开发人员能够更容易的关注业务逻辑的变 化。
三、文本编辑
        FCKeditor是一款功能强大的开源在线文本编辑器(DHTML editor),它使你在web上可以使用类似微软Word 的桌面文本编辑器的许多强大功能。它是轻量级且不必在客户端进行任何方式的安装。
        FreeTextBox 是一个基于 Internet Explorer 中 MSHTML 技术的 ASP.NET 开源服务器控件。这是一款优秀的自由软件(Free Software),我们可以轻松地将其嵌入到 Web Forms 中实现 HTML 内容的在线编辑,在新闻发布、博客写作、论坛社区等多种 Web 系统中都会有用途。
        VietPad是一个功能完整的跨平台的Java/.NET的Vietnamese Unicode开源文本编辑器。支持打开,编辑,打印,转换,排序,和保存基于文本的Unicode格式的Vietnamese文件。
        NetSpell是一款.NET框架下的开源拼写检查引擎。
        PPC_edit是一款应用在Pocket PC上的开源文本编辑器,它支持TXT, RTF, HTML, WordML, DocBook 和 ZIP格式的文件,屏幕上会显示国际标准的软键盘。
四、博客(Blog)
        NovaShare是一款Blog引擎,它使你创建基于交互式的web的新闻和论坛网站,很像WonkoSlice或Slashdot。管理员可以发布文 章和发起投票,浏览者可以创建用户帐号,发表议论等等。
        dasBlog是从BlogX 网上日志引擎发展而来。像Trackback ,Pingback 一样增加许多附加的特征,有完整的Blogger/MovableType API支持,API注释,完整的Radio-style模板定制,支持Mail-To-Weblog/POP3的附件和内嵌图片,基于WEB的 DHTML,OPML,配置的编辑器。
        DotText是一个被使用了数百个blogs的强劲的blog引擎。这是一个N-tiered应用的例子。
         tBlogger是一个C#开发的完整的blog网站程序,使用XML配置。
五、 系统构建

        .NETZ是一款免费开源工具,它可以压缩和打包微软 .NET 框架可执行文件(EXE, DLL)以使他们更小。更小的可执行文件占用的磁盘空间较少且因为读取文件时对磁盘的访问较少而使读取数度更快。它和PE(portable executable)打包工具不一样,.NETZ是使用 C# 编写的存粹的 .NET 解决方案。.NETZ可以用来打包几乎每一种 .NET 支持的语言编写的程序。.NETZ支持 .NET EXE 和 非共享(non-shared)的 DLL 文件。压缩过的程序能以相同的方式解压缩这些对最终用户是透明的。
        NAntContrib为NAnt提供定制任务的工具。
        Prebuild是XML驱动的一款跨平台pre-build工具,使开发人员很容易就可以为IDE和.NET开发工具生成项目或构建文件。它支持 Visual Studio .NET 2002, 2003, 2005, SharpDevelop, MonoDevelop 和 NAnt。
        BusyBeeBuilder是.NET平台下功能强大,易于使用,可扩展的开源构建自动操作工具。
        Draco.NET 是 Windows 服务应用程序。它的设计使其容易持续的集成新特性。Draco.NET监视你的源代码储存库。当探测到你的项目有变化时自动重新创建项目并把包含变化列表 的创建结果发送到你的Email。
        Build Studio为软件的自动构件处理提供了一套完整的解决方案。
        CruiseControl.NET是.NET平台下的一款整合服务器。
        NAnt类似Apache项目下的Ant,是.Net下的开源构建工具。适用在自动编译.NET应用的场合,如.NET项目的每日构建(nightly build)。
五、图表制作

        ZedGraph是C#编写的.NET类库,提供了用户控件和web控件。它可以创建2D的线性图、条形图和饼图。它功能完整且有详细的功能自定义,不过 使用默认的选项就足够好用了。一款类似 PieChart, StackBar, LineChart的C#开源图表组件。
        NPlot是一款.NET下的开源图表类库.它值得称道的地方是优雅且灵活的API设计.NPlot包含了Windows Form控件, ASP.NET控件和一个创建Bitmap图片的类。还有一个可用的GTK#控件。
        XSCharting是C#开发的图表组件,提供了多种多样的图表选项。
        DaveChart是一个免费的DotNet类库。
        NChart 提供了很多值得应用在商业,教育等多个领域的2 D图表。
六、聊天系统

        Dot Net Chat server是基于DotNet框架开发的聊天服务器和客户端项目。
七、内容管理系统(CMS)

        Ludico是C#编写的居于ASP.NET 2.0的Portal/CMS系统。它的模块化设计是你可以按照你希望的使用或开发网站功能。它里面有高级的用户管理,一个所见即所的(WYSIWYG) 的编辑器等。
        mojoPortal是一款C#开发的面相对象网站框架,它可以运行于Windows的ASP.NET 和GNU/Linux 或Mac OS X的Mono的平台上。
        Cuyahoga是C#开发的灵活的CMS / Portal 解决方案。它可以运行于Microsoft .NET 和Mono 平台,支持SQL Server, PostgreSQL或MySQL作为底层数据库。
        Umbraco是一款在.net平台下C#开发的开源内容管理系统,该系统效率,灵活,用户界面都不错。
        Kodai CMS是.NET平台下的一款功能齐全的内容管理系统。
        Rainbow项目是一款使用Microsoft''s ASP.NET和C#技术开发的有丰富功能的开源内容管理系统。
        NkCMS是使用ASP.net和Sql server 2000开发的内容管理系统。
        Amplefile是一款内容管理系统,是.Net环境下的windows应用程序,使用了.Net remoting.
        Go.Kryo是一个用ASP.NET(C#).NET 实现的简单的内容管理系统,后台数据库使用Microsoft SQL Server 。
        ndCMS是 ASP.net (C#)下的一个内容管理系统。它提供了用户管理,文件管理,一个WYSIWYG编辑器,模板管理,拼写检查和内置的http压缩。ndCMS的目标是提 供一个简单而快速的方式部署.Net站点以节省你的时间和金钱。
八、代码覆盖 (Code Coverage)

        NCover是.NET框架下的C#版本代码覆盖分析工具。NCover可以对程序进行 line-by-line 的代码覆盖统计。
九、论坛系统

        YetAnotherForum可以作为ASP.NET开发的网站的论坛或是留言板。它使用MSSQL作为底层数据库。
十、开发工具(IDE)


        SharpDevelop是一个DotNet平台下的免费开发工具,支持C#和VB.NET。


        MonoDevelop是可以支持C#和其它符合.Net规范的开发语言的IDE。


        C# Studio是 C#/Mono/GTK# 开发者的一个简单的IDE。


十一、安装制作


        izfree是一套套免费的工具用于帮助创建使用Microsoft''''s Windows Installer 技术的安装程序。使用izfree你可以为你的应用程序制作强劲的安装程序。


        Windows Installer XML (WiX)可以重XML源文件创建Windows程序安装包的工具集。它支持命令行方式,开发人员可以把结合它来创建MSI和MSM安装包一个可以和商业 软件安装产品相比的开源打包工具。


十二、IoC容器


        Spring.net是从java的Spring Framework移植过来的。java的Spring包含了许多功能和特性,在当前的Spring.net都有提供。Spring.net最初发布的版 本包含了一个很有特色的IoC容器。


        Castle是一组应用开发的工具,内含一个简单的IoC容器。


        StructureMap是.NET环境下的一个轻量级依赖注入工具,StructureMap也是一个灵活的、可扩展的通用“插件”机制的.NE


十三、Bug追踪


        BugNet是一款C#编写的基于Web的开源Bug跟踪系统。


        BTsys是一款轻量级的开源桌面Bug跟踪系统,是C#和ADO.NET实现。一个Bug记录和跟踪的解决方案,支持文件附件和注释历史。


        BugTracker.NET是使用ASP.NET 和 C#开发的基于web的开源Bug跟踪系统。需要SQL Server 或 MSDE支持。它安装简单,容易使用,功能强大。


        BugBye是一款ASP.NET和C#开发的基于web的Bug跟踪系统。


十四、日志工具


        log4net是一个可以帮助程序员把日志信息输出到各种不同目标的.net类库。它可以容易的加载到开发项目中,实现程序调试和运行的时候的日志信息输 出,提供了比.net自己提供的debug类和trace类的功能更多。log4net是从java下有卓越表现的log4j移植过来的。它是 apache基金资助的项目的一部分。


        NLog是C#编写的开源日志类库,它的设计思想是使其简单而灵活。NLog让你处理诊断的日志消息,用相关信息扩充消息,依照你的选择格式化日志消息和 把日志消息输出到一个或多个目的地。


        LogThis是为.NET应用程序提供的一款C#开源日志框架,它可以嵌入到应用程序之中。


        AppLog是一个简单的应用日志工具。它使用C#开发,且使用ByteFX MySQL 数据访问库.。


        C#开发的可扩展日志工具,有高级消息队列支持,可以异步使用。


        CSharp Logger是apache继log4net项目后设计的又一个日志工具。它用来向Windows的事件日志写入debug、info、warn和 error四个等级的信息。


十五、网络客户端


        .NET FTP Client是C#编写的开源类库。


        .NET Telnet是微软.NET Framework下的C#开发的开源telnet类库。它的灵感来至Java Telnet Application。


        metro这个项目是C#编写的类库,它提供了一套丰富的类使开发IP version 4, TCP, UDP and ICMP等工作更容易。它包含了有很有用的工具如包嗅探器,网络分析工具例如路由跟踪,ping等。


        LJ.NET是LiveJournal站点的客户端。它为LJ在线日志服务提供了简单而强大的用户接口。


NET VNC Viewer 是一款完全用C#开发的开源VNC观察器。它兼容Smartphones, Pocket PC和Windows的电脑(.NET CF or .NET Framework)。它比起其它观察器的优点是可以在Pocket PC上全屏显示而且可以旋转屏幕。


        GVDownloader允许你从google videos, metacafe, putfile, youtube, break.com 和更多的地方快速下载内含的视频和多媒体。它的包含一个强劲IE插件和位于你系统托盘的独立程序。


        DotNetOpenMail能够使你在微软.net框架开发的asp.net, WinForm应用程序发送Email。它是C#编写的开源组件,它不需要使用System.Web.Mail类库就可以容易的创建带附件HTML和 Plain-text的Email。程序员不需要知道很多相关的细节就可以使用不同的字符集或不同的MINE编码来创建 multipart/alternative,multipart/related和multipart/mixed的MIME消息。


        DotMSN是一款独立的开源类库,它不需要和官方的MSN Messenger交互,因此不必安装MSN Messenger就可以使用DotMSN和MSN Messenger服务通信.DotMSN是C#编写的,所以.NET环境支持的语言都能够使用.DotMSN类库使用简单而且实现方便。它灵活,坚固, 轻量级利于整合到任何应用系统.使用DotMSN的应用系统能实现从创建消息机器人到自定义客户端等各种不同的功能.如果你的应用程序需要和 Messenger服务通信,DotMSN是一个不错的工具.


        SharpSSH使用C#实现了SSH2协议,它支持SSH, SCP 和 SFTP.


        OpenPOP.NET一组和POP Servers通信的.NET类库。


        IceChat是为连接多样的IRC Servers设计的Internet Relay Chat Client。


        lphant是为edonkey/emule开发的开源客户端程序。


        .NET FTP Client C#开发的类库。


        OpenSmtp.net 是 C# 开发的开源SMTP组件。它不依赖.NET Framework 的System.Web.Mail 包中的类。允许开发人员使用不同于MS SMTP的SMTP 服务器且提供了web service而可以通过HTTP发送email。


网络服务器


ODC(#)H是一款C#编写的开源hub software,它功能强大,消耗的资源少且支持插件功能。


Dawn of Light (DOL)是第一个开源的Dark Age of Camelot (DAOC)游戏服务器,你可以创建自己的服务器且自己设计游戏内容。DOL使用.Net Framework框架的C#编写,使用XML和MySQL存储数据,支持Windows和Mono平台。


NeatUpload可以让ASP.NET开发人员把磁盘上的文件通过流的方式上传并且可以监视上传进度。它是开源的且在 Mono''s XSP/mod_mono和微软的ASP.NET下运行得一样好。包含2个自定义控件:*用户可以通过INPUTFILE选择一个要上传的文件。


ProgressBar可以用进度条方式或弹出窗方式显示上传进度。当JavaScript可用时ProgressBar是用类似AJAX 的无刷新方式展现,但也允许JavaScript不可用的用户见到上传进度。


NMail ,C#开发的开源程序,提供SMTP 客户端和服务器, POP3 和 IMAP4 服务器。


ftp://ftp.net/是使用C#编写的开源多线程FTP程序。


CSharp Email Server C# Email Server是 Java Email Server (JES) 的C#版本。


PDF类库


PDFsharp是一款可以让.NET框架支持的任何语言很容易的创建PDF文件的类库。


ASP.NET FO PDF 是一款C#编写类似于ASP.NET服务器控件的控件。它接受DataTable 和一些其它参数来创建XSL FO,并使用NFOP (Apache FOP Port in J#) PDF Formatter来绘制一个类似PDF Report 的DataGrid 。今后将会增加更多的标签来可以生成XSL FO 。


Report.NET 开源类库包含了生成精确PDF文档的类。它是.NET平台下的C#编写的,可以帮助你创建简单的灵活的PDF文件。你可以从任何ADO.NET的 DataSet取得数据来创建PDF文档。ASP.NET可以用Report.NET来创建动态的PDF响应页面。


SharpPDF是可以用来简单的创建PDF文件的C#类库。它创建的文件百分白兼容PDF格式。


iTextSharp是一款开源的PDF操作类库,使用它可以快速的创建PDF文件。http://hardrock.cnblogs.com/ 是一个关于 iTextSharp的中文Blog。


持久层框架


NHibernate是一个面向.NET环境的针对关系型数据库的对象持久化类库。 NHibernate来源于非常优秀的基于Java的Hibernate关系型持久化工具。 NHibernate从数据库底层来持久化你的.Net对象到关系型数据库。NHibernate为你处理这些,你不用自己写SQL去数据库存取对象。你 的代码仅仅和对象关联,NHibernat自动产生SQL语句,并确保对象提交到正确的表和字段中去.大量减少开发时人工使用SQL和ADO.NET处理 数据的时间. NHibernate可以帮助你消除或者包装那些针对特定数据库的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。因此对于那些在 基于.NET的中间层的应用中,它们实现面向对象的业务模型和商业逻辑的应用,NHibernate是最有用的。


FileHelpers Library是一款C#编写的开源 .NET 类库。它使用简单,很容易就可以从固定长度文件或界定记录(CSV)读/写数据。它也支持从不同的数据存储格式(Excel, Access, SqlServer)导入/导出数据。


Websharp是国人开源的一款开源持久层框架,它的目标是设计一个基于.Net的通用的应用软件系统的框架,以简化基于.Net平台的 企业应用软件的开发。目前,Websharp关注于企业应用软件的以下几个方面:1、数据库访问 2、 O/R 映射 3、 AOP 4、 分布式访问


ObjectBroker是.NET平台下的一款开源O/R映射框架。它支持对象缓存,1:1, 1:n 和 m:n的关联映射等特性。


Gentle.NET是一款开源的与关系数据库(RDBMS)无关的对象持久层框架,可以自动生成SQL和对象结构。它拥有一个SQL工厂 用来创建自定义查询、DataView构建助手和卓越的性能和完善的文档。


Ubik是C# 2.0下的ORM持久层框架,当前是WinForms应用程序开发提供的.它支持OPath的子集而可以进行面向对象查询,且包含一个网络事件系统.


NDal是一个数据提取层(DAL)框架,它可以运行在.NET和Mono环境下。


Persist.NET是C#编写的一款完整的持久层框架。


ObjectBroker是.NET平台下的数据库对象/关系映射(O/R Mapping)框架。


iBATIS.NET帮助你的应用系统创建更好的持久层框架。


Advanced Data Provider是为ADO.NET提供的动态数据提供者。可以让应用程序透明的访问不同的ADO.NET 数据提供者。


OJB.NET是一款.NET平台下的对象/关系映射(O/R Mapping)工具。


门户系统


OmniPortal基于一种web-portal-kernel(Web门户核心)的思想而构建的开源基础框架,它解决了安全控制、主题 和本地化等。你可以基于 OmniPortal 来更容易的创建任意的Web应用系统(例如 ERP, CMS, CRM)。它支持Mono 和.Net 。对于Web开发人员来说,OmniPortal为他们提供了一款优秀的二次开发基础类库。


SharpNuke.NET是一款C#开发的基于 ASP.NET 的开源 Portal/CMS。最初是从流行的VB.NET开发的web portal系统DotNetNuke移植过来的的。以后的版本将会兼容 Windows和 Linux Mono。


Personal .NET Portal是一个基于Web的个人门户系统。它试图提供一种简单的方式建立个人网站,页面使用标签和模板创建。


My Community Portal提供了一个统一的Internet门户,作为论坛,群组,聊天,你自己的Email,搜索引擎,网络目录,个人主页,投票还有更多的功能入 口。


剖析工具(Profilers)


Prof-It是一款独特易用的C#程序剖析工具。当保持对一个最小量的源代码的探测时,它为每一条语句测量执行频率。


NProf不仅仅是成熟的剖析程序,也是一套可以用来创建其它功能齐全的剖析程序的完整API,以及用可视化的工具扩展的默认GUI。


NProfiler,.NET平台下的一个应用程序剖析工具。


项目管理


SharpForge支持协作多个软件项目的开发和管理,它为你的团队提供类似 SourceForge 和 CodePlex的功能。SharpForge是C#开发的.NET 2.0开源项目。


User Story.NET是一个Extreme Programming 项目。


RSS和RDF工具


Rss Bandit是C#开发的开源RSS阅读器,它内建多国语系,支持Atom 1.0以及其他各种的RSS feed格式。它画面漂亮,拥有分页浏览功能,软件细部设置弹性度高。它的操作画面直观简单易懂,有一个很好的Command模式和ListViewEx 来使用,可让使用者很快的上手。


iPodder.NET是一款C#编写的开源媒体收集器,它能自动帮你从互联网上下载音乐,能帮你轻松地从成千上万的音乐中选择你喜欢的。 用它设置好订阅RSS feeds后,只要节目一有更新,它就自动下载了,你不必大量的浪费时间自己手工下载。它还整合了iTunes,创建播放列表和iPod同步功能,你可以 用Apple iTunes或Media Player播放,也可以把音乐导入到你的iPod或其他MP3播放器中。


FeedExpress主要是让你订阅一些RSS/RDF资源,知名的如FeedExpress里的Subscriptions。它和 Outlook Express让你订阅一些新闻组是一样的。


RSS.NET是一款操作RSS feeds的开源.NET类库。它为解析和编写RSS feeds提供了一个可重用的对象模型。它完全兼容RSS 0.90, 0.91, 0.92, 和 2.0.1等版本。


GtkSharpRSS是C#开发的开源RSS和RDF客户端,它用于 Mono, Gtk#, 和 RSS.NET。它也可以通过内嵌于Mozilla的窗口来显示内容。


Atom.NET是一款完全使用C#开发的开源类库,它的目标是提供便捷的方法来操作Arom Feeds。它提供一个对象模型来写入和解析Atom Feeds。它只兼容0.3Atom规范,可以运行于微软.NET 1.x,Mono 0.29 或更高版本。


NRss是为微软.NET框架和Mono下提供的开源类库,它读取RSS Feeds元素然后以树型结构来展现对象关系。


Aggie是一个新闻收集器,它是桌面应用程序,可以下载最新的新闻并通过web页面的形式呈现。


mail2rss是.NET下的 web service,它在你请求时检查你的电子信箱并返回包含电子信箱里的消息的 RSS feed。它是完全用C#开发的开源项目,没用使用任何第三方控件。


规则引擎


NxBRE是.NET平台下的一款开源轻量级的业务规则引擎(aka Rule Based Engine),它由正向串行的推理引擎(forward-chaining inference engine)和XML驱动流控制引擎(XML-driven flow control engine)组成.它支持 RuleML 0.9 Naf Datalog 和 Visio 2003 建模。


SRE (Simple Rule Engine)是.NET下的一款轻量级的开源正向串行的推理规则引擎(forward chaining inference rule engine)。它容易理解,可以解决复杂的问题。


搜索引擎


NLucene是Lucene的.NET版本。


DotLucene,Lucene.Net开源项目转向商业化后,DotLucene以Lucene.Net作为基础继续进行开发。


版本控制(CVS)


Porc是为CVS和项目管理工具提供了完整的图形化界面,它在CVS的基础上增加了一些有趣的功能。它是.NET平台下用C#编写的。


Sharpcvslib是C#语言编写的CVS客户端API。当前它为公共CVS命令提供了核心函数。


NetCvsLib是为.NET平台下C#开发的一个CVS客户端。它作为一个单独的程序集而实现,因而可以很容易的集成到其它项目中去。


SQL客户端


SqlBuddy是C#编写的一款用于Microsoft SQL Server和MSDE的开源工具,使用它可以很容易的编写SQL脚本。SqlBuddy提供的功能和查询分析器的目的有些微不同,它倾向于帮助使用者编 写SQL。


QueryCommander是一款开源的Sql editor,模拟微软的查询分析器,Visual Studio的环境类型。QueryCommander的特点包括类似IntelliSense功能,自动注释,xml文档模型,xml2data等。


SQL Buddy是一款有特色的免费MSDE / Sql Server IDE,它是用.NET框架的C#编写。


Database Commander是Windows操作系统下的一款用户界面友好的数据库管理工具。


模板引擎


NVelocity 是一个以 .NET 为基础的模板引擎。它允许任何人通过简单而强大的模板语言来定义对象。


测试工具


NUnit一款单元测试框架,它可以应用于遵循.NET框架标准的所有语言下。NUnit最初是从JUnit移植过来的。NUnit完全使 用C#编写且设计时考虑了多数.NET语言的特性,例如自定义属性和其它反射特性。


NMock是一款.NET平台下的基于动态代理的Mock模拟对象类库,用于C#开发。Mock对象使测试更简单,它测试单个组件或单个类 时不需要其它所有组件真正实现。也就是说我们可以仅仅只是测试一个类,比起测试一个完整的对象关系树更容易查清楚Bug。Mock对象一般用于以测试为驱 动的开发当中。


TestDriven.NET是一款和Visual Studio .NET无缝结合的测试插件。它可以和NUnit, MbUnit 和 Team System紧密结合。


Rhino.Mocks源于EasyMock.Net,它试图提供一种更简单的方法去创建和使用mock objects且使你得到更好的重构支持。它结合了EasyMock.Net和NMock的方式。


Dot NetUnit实现了XUnit 测试框架,是.NET平台下的单元测试组件。


EasyMock.NET是由Java实现的EasyMock到.net平台的一个移植版本的一组类库。它提供了一个简单的方法用来模拟接 口和远程对象。


dotunit是JUnit移植到微软.net平台的测试框架。它可以实现自动化测试。


NUnitForms是NUnit的扩展。它为Windows Forms应用程序提供单元测试和压力测试,可以容易的用它为你的Windows Forms类进行自动化测试。


Web框架


NStruts 是java下大名鼎鼎的struts开源MVC框架的ASP.NET版本,是jakarta struts框架的一部分。


Maverick.NET是从Maverick移植来的.NET版本,是一款开源的 Web MVC框架.它专注于MVC逻辑,它支持丰富的模板和转换技术。


MaverickLite是ASP.Net下的一款简单的开源表现层框架。它在建立在Maverick.Net framework基础上。它使用front controller的方式来处理请求。


Ingenious MVC ,基于.NET 2.0的构MVC结构的应用程序,它包含即开即用(out-of-the-box)的特性支持ASP.NET和Windows Forms应用程序.它也可以在大多数方法中扩展和定制.


Websharp是.NET平台下的一款轻量级应用框架。


Email客户端


GmailerXP是为Google的Gmail服务提供了全套的工具开源程序。在线所能做的GmailerXP都允许用户做,它也整合了 你任何时候在Gmail需要的其它一些程序的特点(GML, Gmailto,等)。


RemoteCalendars是C#开发的为Outlook 2003/2007提供的一款开源 COM-.NET 插件。安装完这款插件后,Outlook的用都可以用Outlook 2003/2007订阅、重新读取和删除远程iCalendar(RFC 2445)。


SharpWebMail是一款C#编写的ASP.NET下的EMail客户端。它通过POP3服务器接收邮件,通过SMTP服务器发送邮 件。它的配置很简单(只需要在web.config 里面做几个设置)。


Web测试


NUnitAsp是一款自动测试 ASP.NET页面的开源工具. 它是从NUnit扩展来的。


Wiki引擎


Perspective是一款C#开源Wiki引擎,它使用户可以很容易的合作进行编辑,链接和共享Web页面,它里面有安全和分级的管理 环境。Perspective居于奇妙的Wiki思想,包含了其它一些有前途且效果好的特性。


DevHawk Wiki是一款.NET平台下由C#实现的开源Wiki引擎。


ProntoWiki是使用VWD (Visual Web Developer)编写的C#开源wiki引擎,ASP.NET 2.0 和 SQLExpress 2005作为后台。Wiki引擎速度快且容易使用,提供了和 rich text editor 一样的文本标记( text markup )功能。它可以自动通过web接口接收图片和文件作为附件。另外,ProntoWiki的特点还有页面可以在贴出或更新之前预览,基于角色的用户认证,使 用 web parts 自定义外观和布局,历史跟踪,和功能查询。


FlexWiki是一款使用.NET技术(C#和ASP.NET)编写实现的开源多人协作的写作工具。


Thufir提供了字处理和文档链接功能。它类似Wiki-Wiki ,且它具有“所见即所得”的界面。它还可以通过和Word交互来利用Word的拼写检查功能。


XML解析


ODF Add-in for Microsoft Word是一款开源的XML转换器,它提供的工具为在 Open XML Formats 和 Open Document Format(ODF)之间转换提供了桥梁。作为第一款这类组件,ODF Add-in for Microsoft Word 2007使你可以在Word里打开和保存ODF文档。


NDigester是Jakarta Commons-Digester 工具的.NET实现版本。提供了完整的对XML文档的处理控制。


SAX.NET是用来操作XML的简单的API。它是从最初在java上被广泛使用的API移植来的。


多媒体工具


FreeImage是为开发人员提供的开源类库项目,它支持多种流行的图片格式(PNG, JPEG, TIFF, BMP等).FreeImage简单,易用,快速,多线程安全,兼容所以32位的windows并且是跨平台的(Linux和Mac OS X).


TVGuide是一款显示通过简单而清晰的接口下载的TV列表的Windows程序。


DirectShow.NET Library 这个类库的目的是使你可以从.NET应用程序内部调用Microsoft''''s DirectShow的功能。它支持Visual Basic .NET 和 C#,理论上应该是可以支持任何.NET语言。


iTunes Agent是和iTunes一起使用的C#开源MP3播放器。它可以使得在播放MP3时,播放列表与MP3自动播放器同步。


MeGUI是一款基于ISO MPEG-4的全面的GUI解决方案。它可以支持使用MPEG-4 ASP (XviD & libavcodec MPEG-4)标准的mencoder,使用MPEG-4 AVC (x264) 标准的x264.exe 或 mencoder,使用(HE)AAC audio标准的BeSweet、Nero AAC encoder和使用MP4 muxing标准的mp4box。


OpenImageManager是一款C#开发的新的开源图片管理器。它基于非常流行的图片查看器ACDSee(TM)的思想设计,它的 功能有缩略图生成,HTML相册生成器,支持10种语言等等。


abrViewer.NET是C#编写的可以批量浏览和输出Adobe Photoshop的笔刷(.abr files)的开源工具。


MeWiG是使用.NET框架开发的Windows下的开源MEncoder(MPlayer的一个组成部分)。你能够转换成几乎任何视频 资源,无需要命令行操作。


VTK.NET是.NET包装的Visualization Toolkit。你可以使用它来编写C#、C++、Visual Basic 或 J#的Windows Forms应用程序。它包含在设计时可拖拽的Windows Forms控件。


SubtitleCreator使你可以为你的DVD创建对白字幕。它拥有先进的同步特性,DVD预览,和一个简单的所见即所得 (WYSIWYG)的编辑器。当然你也能够修改现有DVD的对白字幕的定位和颜色。


Paint.NET是在Windows下使用C#编写的一款出色的开源图像编辑器。


MediaPortal试图帮你把电脑变成一个高级的Multi-Media Center / HTPC。它允许你听你喜欢的音乐&收音机,看你的video和DVD,观看,确定和记录实况电视等其它功能。MediaPortal是开源的系 统,你可以完全免费的获得它。任何人都可以帮组开发MediaPortal 或者根据自己的需要把Media Portal 进行调整。


C#游戏


Exult是可以在现在的操作系统上面运行Ultima7的游戏引擎,它提供了一个地图编辑器和其它的一些工具让你制作属于你自己的模型和 游戏.


Ch2r是第一款为光晕2(Halo 2)提供的开源模型编辑器。


这是一款从在Palm平台上流行的Space Trader游戏移植的Windows版本。


EMU7800是C#编写的一款Atari 2600/7800模拟器。


BooGame是面相对象的 CLS-compliant,开源2D游戏引擎框架。它提供了高级的硬件加速video,audio,keyboard,mouse,内嵌脚本和许多图片 格式。它使用C#开发的,目标是支持.NET 1.1, 2.0 和 Mono 平台。


RealmForge这款开源的.NET 3D游戏引擎前身是Visual3D.NET,它是一套使用C#、 .NET 2.0和XNA进行可视化设计和开发3D游戏、模拟软件和交互式环境的框架和工具集。


Pocket Sudoku是 Pocket PC (Windows Mobile)上的数独(Sudoku)游戏。它可以有五种不同等级的难度来创建数独(Sudoku)迷题,解答正确任何迷题,都会用铅笔标记。


CsGL在.Net框架下为OpenGL 1.1 - 1.4和许多扩展的支持提供支持.


文档工具


NDoc 可以将 C#.NET 编译生成的程序集和对应的 /doc XML 文档,自动转换成如 .NET Framework SDK 类库文档或者 MSDN Library 在线 .NET 类库文档形式的代码文档,让您快速拥有专业级的类库API 文档。


脚本语言


Sharp Vector Graphics (SVG#)是.Net框架下C#开发的文档对象模型。它帮助你在.Net平台上进行SVG开发。


IronPython是.NET平台上的Python的CodeName。它拥有一个完全动态的交互式解释器,可以支持所有的.NET类型 库,并且集成了.NET Framework的诸多优点,甚至可以用Python的类来扩展.NET类。IronPython遵从ECMA的CLI标准(ECMA-335),可以 运行在Microsoft .NET Framework和MONO上。


地理信息系统(GIS)


SharpMap是一款易于使用的地图渲染器,它可以为Web和Windows应用程序渲染GIS数据。SharpMap是使用C#编写, 基于.NET 2.0框架上开发的开源项目。


monoGIS将成为Mono平台下的开源完整GIS。已经发布了internet mapserver,OGC WMS实现和一些工具像空间格式转换。


NASA World Wind 是C#开发的个人电脑上的开源的3D图形虚拟地球系统。它结合了美国国家航空航天局(NASA)从卫星拍摄的图像,这些图像应用于Blue Marble, Landsat 7, SRTM, MODIS 以及其它更多的地方。


其它C#开源项目


DockPanel Suite是一款开源的.Net Windows Forms开发环境下的停靠控件(docking)类库。它模仿Visual Studio .Net的效果开发的。


wx.NET是基于.NET通用语言基础结构 (CLI)的开源项目。它致力于开发一个基于.NET的GUI库,它按照wxWidgets的类层次用C#编写,可以在多种CLI下执行,包 括.NET,Mono,和DotGNU Portable.NET。


MMC .NET类库是为Windows的MMC+Snapin开发提供支持而包装的一套开源类库。


DPAToolkit(Design Pattern Automation Toolkit)是应用设计模式设计应用程序的开源工具包,它有便捷的代码生成,反向工程功能。拖拽(Drag and Drop)方式便捷的创建UML类图。支持为代码生成,反向工程编写自定义插件。


mjbWorld 是一款开源的3D编辑器,它允许用户通过图形界面的选择和拖拽方式来编辑图形。它基于和应用X3D与VRML标准。该软件目的用于利用建立开放免费程序建 立3D世界。同时它也可以用于其他免费开放软件程序之间进行数据交换。mjbWorld有Java, C# 和C++ /Qt等版本。


MonoCalendar是.NET平台下的开源日历程序,它的目的是为Mac平台之外的其它平台提供一款类似iCal的日历程序。


Data Tier Generator是一款微软 .NET平台下的开源项目,它为访问SQL Server 2000而生成存储过程的SQL Server 2000脚本和C#类。这些存储过程包含了Insert, Update, Delete, Select, 根据PK的Select, 根据FK的Select的SQL脚本。


Finisar.SQLite是.NET框架下的一款为存取SQLite-Databases提供的ADO.NET Data Provider。


Math.NET的目标是为提供一款自身包含清晰框架的符号运算和数学运算/科学运算,它是C#开发的开源类库。Math.NET含了一个 支持线性代数的解析器,分析复杂微分,解方程等等功能。


Ascii Generator dotNET (ascgen2)是一款把图片转换成高质量的ASCII字符组合(ASCII art - text)。第一个版本支持变形和粗体字体,和实时调节输出。


GPSProxy是.NET Compact Framework下的开源程序。它通过COM口在Pocket PC之间拷贝GPS数据,可以把GPS数据格式从NMEA 0183转换成Garmin GPS。它是基于.NET Fra的Windows版本。


FOP C# Port这是Apache居于java的 XSL-FO 格式转换器的C#版本。它采用并扩展了XSL-FO标准使FOPs在可以嵌入.NET CLR管理代码应用。

了解更多

IT工程师的必备网站,初学者也值得一看

一、IT工具类网站

1、http://tool.lu/

在线工具是一个IT在线工具网站,IT能用的在线工具基本都在这里了

IT工程师的必备网站,初学者也值得一看

2、http://www.css88.com/

WEB前端开发包含各种前端类工具和技术类的文章

IT工程师的必备网站,初学者也值得一看

二、IT插件类网站

1、http://www.jq22.com/

jQuery插件库这个网站提供各种jQuery特效的详细使用方法,在线预览,jQuery插件下载及教程

IT工程师的必备网站,初学者也值得一看

2、http://www.layui.com/

这是一个经典模块化的前端框架网站

IT工程师的必备网站,初学者也值得一看

IT工程师的必备网站,初学者也值得一看

三、IT配色类网站

1、http://www.mb5u.com/tool/peise/

站长工具这个网站给我们提供了很多的配色方案,我们可以根据自己的需求选择使用。我们可以输入RGB获取我们想要的配色。

IT工程师的必备网站,初学者也值得一看

2、https://color.adobe.com/zh/create/color-wheel

这个网站是Adobe公司写的,提供了多重配色方案,我们可以点击中间的颜色方案来搭配我们所需要的颜色。

IT工程师的必备网站,初学者也值得一看

四、IT图标类网站

1、http://www.iconfont.cn/plus

Iconfont-国内功能很强大且图标内容很丰富的矢量图标库,提供矢量图标下载、在线存储、格式转换等功能。

IT工程师的必备网站,初学者也值得一看

2、http://www.easyicon.net/iconsearch/ios/

这个网站提供的图标不是单一颜色的,而是设计好的颜色。而且所有的图标都是免费使用的,点击就可以下载。

IT工程师的必备网站,初学者也值得一看

五、IT素材类网站

1、https://unsplash.com/

素材网站我只给大家分享Unsplash这个网站,其他的我相信大家都知道,我就不多做分享了。这个网站是一个分享免费高质量照片的网站。

IT工程师的必备网站,初学者也值得一看

六、IT字体类网站

1、http://www.qiuziti.com/

这个网站是一个上图片找字体的网站,只要你在图片看的好看的字体,通过上传图片你就可以找到自己想要的字体。

IT工程师的必备网站,初学者也值得一看


2、http://font.chinaz.com/

站长素材也是一个不错的字体查找网站,在这里也可以找到我们想要的字体

IT工程师的必备网站,初学者也值得一看

了解更多

linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符)

Group By/Having操作符

适用场景:分组数据,为我们查找数据缩小范围。

说明:分配并返回对传入参数进行分组操作后的可枚举对象。分组;延迟

1.简单形式:

var q = from p in db.Products group p by p.CategoryID into g select g;

语句描述:使用Group By按CategoryID划分产品。

说明:from p in db.Products 表示从表中将产品对象取出来。group p by p.CategoryID into g表示对p按CategoryID字段归类。其结果命名为g,一旦重新命名,p的作用域就结束了,所以,最后select时,只能select g。当然,也不必重新命名可以这样写:

var q = from p in db.Products group p by p.CategoryID;

我们用示意图表示:

GroupBy分组统计示意图

如果想遍历某类别中所有记录,这样:

foreach (var gp in q) { if (gp.Key == 2) { foreach (var item in gp) { //do something } } }

2.Select匿名类:

var q = from p in db.Products group p by p.CategoryID into g select new { CategoryID = g.Key, g };

说明:在这句LINQ语句中,有2个property:CategoryID和g。这个匿名类,其实质是对返回结果集重新进行了包装。把g的property封装成一个完整的分组。如下图所示:

GroupBy分组匿名类示意图

如果想遍历某匿名类中所有记录,要这么做:

foreach (var gp in q) { if (gp.CategoryID == 2) { foreach (var item in gp.g) { //do something } } }

3.最大值

var q = from p in db.Products group p by p.CategoryID into g select new { g.Key, MaxPrice = g.Max(p => p.UnitPrice) };

语句描述:使用Group By和Max查找每个CategoryID的最高单价。

说明:先按CategoryID归类,判断各个分类产品中单价最大的Products。取出CategoryID值,并把UnitPrice值赋给MaxPrice。

4.最小值

var q = from p in db.Products group p by p.CategoryID into g select new { g.Key, MinPrice = g.Min(p => p.UnitPrice) };

语句描述:使用Group By和Min查找每个CategoryID的最低单价。

说明:先按CategoryID归类,判断各个分类产品中单价最小的Products。取出CategoryID值,并把UnitPrice值赋给MinPrice。

5.平均值

var q = from p in db.Products group p by p.CategoryID into g select new { g.Key, AveragePrice = g.Average(p => p.UnitPrice) };

语句描述:使用Group By和Average得到每个CategoryID的平均单价。

说明:先按CategoryID归类,取出CategoryID值和各个分类产品中单价的平均值。

6.求和

var q = from p in db.Products group p by p.CategoryID into g select new { g.Key, TotalPrice = g.Sum(p => p.UnitPrice) };

语句描述:使用Group By和Sum得到每个CategoryID 的单价总计。

说明:先按CategoryID归类,取出CategoryID值和各个分类产品中单价的总和。

7.计数

var q = from p in db.Products group p by p.CategoryID into g select new { g.Key, NumProducts = g.Count() };

语句描述:使用Group By和Count得到每个CategoryID中产品的数量。

说明:先按CategoryID归类,取出CategoryID值和各个分类产品的数量。

8.带条件计数

var q = from p in db.Products group p by p.CategoryID into g select new { g.Key, NumProducts = g.Count(p => p.Discontinued) };

语句描述:使用Group By和Count得到每个CategoryID中断货产品的数量。

说明:先按CategoryID归类,取出CategoryID值和各个分类产品的断货数量。 Count函数里,使用了Lambda表达式,Lambda表达式中的p,代表这个组里的一个元素或对象,即某一个产品。

9.Where限制

var q = from p in db.Products group p by p.CategoryID into g where g.Count() >= 10 select new { g.Key, ProductCount = g.Count() };

语句描述:根据产品的―ID分组,查询产品数量大于10的ID和产品数量。这个示例在Group By子句后使用Where子句查找所有至少有10种产品的类别。

说明:在翻译成SQL语句时,在最外层嵌套了Where条件。

10.多列(Multiple Columns)

var categories = from p in db.Products group p by new { p.CategoryID, p.SupplierID } into g select new { g.Key, g };

语句描述:使用Group By按CategoryID和SupplierID将产品分组。

说明:既按产品的分类,又按供应商分类。在by后面,new出来一个匿名类。这里,Key其实质是一个类的对象,Key包含两个Property:CategoryID、SupplierID。用g.Key.CategoryID可以遍历CategoryID的值。

11.表达式(Expression)

var categories = from p in db.Products group p by new { Criterion = p.UnitPrice > 10 } into g select g;

语句描述:使用Group By返回两个产品序列。第一个序列包含单价大于10的产品。第二个序列包含单价小于或等于10的产品。

说明:按产品单价是否大于10分类。其结果分为两类,大于的是一类,小于及等于为另一类。

Exists/In/Any/All/Contains操作符

适用场景:用于判断集合中元素,进一步缩小范围。

Any

说明:用于判断集合中是否有元素满足某一条件;不延迟。(若条件为空,则集合只要不为空就返回True,否则为False)。有2种形式,分别为简单形式和带条件形式。

1.简单形式:

仅返回没有订单的客户:

var q = from c in db.Customers where !c.Orders.Any() select c;

生成SQL语句为:

SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax] FROM [dbo].[Customers] AS [t0] WHERE NOT (EXISTS( SELECT NULL AS [EMPTY] FROM [dbo].[Orders] AS [t1] WHERE [t1].[CustomerID] = [t0].[CustomerID] ))

2.带条件形式:

仅返回至少有一种产品断货的类别:

var q = from c in db.Categories where c.Products.Any(p => p.Discontinued) select c;

生成SQL语句为:

SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description], [t0].[Picture] FROM [dbo].[Categories] AS [t0] WHERE EXISTS( SELECT NULL AS [EMPTY] FROM [dbo].[Products] AS [t1] WHERE ([t1].[Discontinued] = 1) AND ([t1].[CategoryID] = [t0].[CategoryID]) )

All

说明:用于判断集合中所有元素是否都满足某一条件;不延迟

1.带条件形式

var q = from c in db.Customers where c.Orders.All(o => o.ShipCity == c.City) select c;

语句描述:这个例子返回所有订单都运往其所在城市的客户或未下订单的客户。

Contains

说明:用于判断集合中是否包含有某一元素;不延迟。它是对两个序列进行连接操作的。

string[] customerID_Set = new string[] { "AROUT", "BOLID", "FISSA" }; var q = ( from o in db.Orders where customerID_Set.Contains(o.CustomerID) select o).ToList();

语句描述:查找"AROUT", "BOLID" 和 "FISSA" 这三个客户的订单。先定义了一个数组,在LINQ to SQL中使用Contains,数组中包含了所有的CustomerID,即返回结果中,所有的CustomerID都在这个集合内。也就是in。 你也可以把数组的定义放在LINQ to SQL语句里。比如:

var q = ( from o in db.Orders where ( new string[] { "AROUT", "BOLID", "FISSA" }) .Contains(o.CustomerID) select o).ToList();

Not Contains则取反:

var q = ( from o in db.Orders where !( new string[] { "AROUT", "BOLID", "FISSA" }) .Contains(o.CustomerID) select o).ToList();

1.包含一个对象:

var order = (from o in db.Orders where o.OrderID == 10248 select o).First(); var q = db.Customers.Where(p => p.Orders.Contains(order)).ToList(); foreach (var cust in q) { foreach (var ord in cust.Orders) { //do something } }

语句描述:这个例子使用Contain查找哪个客户包含OrderID为10248的订单。

2.包含多个值:

string[] cities = new string[] { "Seattle", "London", "Vancouver", "Paris" }; var q = db.Customers.Where(p=>cities.Contains(p.City)).ToList();

语句描述:这个例子使用Contains查找其所在城市为西雅图、伦敦、巴黎或温哥华的客户。

总结一下这篇我们说明了以下语句:

Group By/Having 分组数据;延迟
Any 用于判断集合中是否有元素满足某一条件;不延迟
All 用于判断集合中所有元素是否都满足某一条件;不延迟
Contains 用于判断集合中是否包含有某一元素;不延迟

 

 

 

适用场景:统计数据吧,比如统计一些数据的个数,求和,最小值,最大值,平均数。

Count

说明:返回集合中的元素个数,返回INT类型;不延迟。生成SQL语句为:SELECT COUNT(*) FROM

1.简单形式:

得到数据库中客户的数量:

var q = db.Customers.Count();

2.带条件形式:

得到数据库中未断货产品的数量:

var q = db.Products.Count(p => !p.Discontinued);

LongCount

说明:返回集合中的元素个数,返回LONG类型;不延迟。对于元素个数较多的集合可视情况可以选用LongCount来统计元素个数,它返回long类型,比较精确。生成SQL语句为:SELECT COUNT_BIG(*) FROM

var q = db.Customers.LongCount();

Sum

说明:返回集合中数值类型元素之和,集合应为INT类型集合;不延迟。生成SQL语句为:SELECT SUM(…) FROM

1.简单形式:

得到所有订单的总运费:

var q = db.Orders.Select(o => o.Freight).Sum();

2.映射形式:

得到所有产品的订货总数:

var q = db.Products.Sum(p => p.UnitsOnOrder);

Min

说明:返回集合中元素的最小值;不延迟。生成SQL语句为:SELECT MIN(…) FROM

1.简单形式:

查找任意产品的最低单价:

var q = db.Products.Select(p => p.UnitPrice).Min();

2.映射形式:

查找任意订单的最低运费:

var q = db.Orders.Min(o => o.Freight);

3.元素:

查找每个类别中单价最低的产品:

var categories = from p in db.Products group p by p.CategoryID into g select new { CategoryID = g.Key, CheapestProducts = from p2 in g where p2.UnitPrice == g.Min(p3 => p3.UnitPrice) select p2 };

Max

说明:返回集合中元素的最大值;不延迟。生成SQL语句为:SELECT MAX(…) FROM

1.简单形式:

查找任意雇员的最近雇用日期:

var q = db.Employees.Select(e => e.HireDate).Max();

2.映射形式:

查找任意产品的最大库存量:

var q = db.Products.Max(p => p.UnitsInStock);

3.元素:

查找每个类别中单价最高的产品:

var categories = from p in db.Products group p by p.CategoryID into g select new { g.Key, MostExpensiveProducts = from p2 in g where p2.UnitPrice == g.Max(p3 => p3.UnitPrice) select p2 };

Average

说明:返回集合中的数值类型元素的平均值。集合应为数字类型集合,其返回值类型为double;不延迟。生成SQL语句为:SELECT AVG(…) FROM

1.简单形式:

得到所有订单的平均运费:

var q = db.Orders.Select(o => o.Freight).Average();

2.映射形式:

得到所有产品的平均单价:

var q = db.Products.Average(p => p.UnitPrice);

3.元素:

查找每个类别中单价高于该类别平均单价的产品:

var categories = from p in db.Products group p by p.CategoryID into g select new { g.Key, ExpensiveProducts = from p2 in g where p2.UnitPrice > g.Average(p3 => p3.UnitPrice) select p2 };

了解更多