在Mono中使用Linq

 
    Mono现在的版本是1.9,也是最终2.0的beta版,此版的System.Core库中增加了对Linq的开源实现。今天有空下载下来试了一下,感觉还不错。
只是所用的SharpDevlop3.0beta不尽人意,新建的工程一句代码都不写有时也会编译不过,比如自动加入的default.aspx得删掉重建一次才可,另外每加入一个新文件,都会自动生成很多的垃圾代码,更让人难受的是有些类实例的属性或方法竟然“点”不出,不气死算是命大,与Ms的vs.net相比这个IDE就太粗糙了。
用vs.net编写也是可以的,甚至用它编译都是可以的,只需去掉那些自动加入的企业库、扩展库就可以了。我在SharpDevlop和vs.net中分别编译通过以后,都能在mono中运行。
我其实是想试一下与数据库相关的Linq,但目前mono中还没有类似于Linq to Sql这样的框架,我在前面的日志中提到过的DbLinq2007,虽然以后可能会加入到Mono,但现在还没有看到官方消息,我在相关项目论坛上看到了很多类似的疑问,据称有一个可能的方法是,把DbLinq2007项目中,特别是Linq to MySql中的System.Data.dll用mono的System.Data.dll替换以后重新编译生成,就可以用了,这个倒没去尝试,只是试了一下仅把DbLinq2007中的DbLinq.dll添加引用,不写代码,就编译不过,我想那种方法可能也靠不住;另外,据说Linq to PostgresSql现在就可以用于Mono了,但测试了一下好象还不行。不过这些问题相信很快就会得到解决的,Mono与DbLinq都值得期待。
下面的一些代码很简单,至于哪些是windows中的专有库,用过vs.net可能都知道。很多朋友可能还没有使用过mono,可能有些帮助。这些代码可以用vs.net编写,如果想体验一下SharpDevelop可以去下载一个,如果不想使用盗版的vs.net,或者是商业公司不敢使用,或者使用的是windows平台(Linux下面可以用monodevelop),那么SharpDevelop可能是最好的选择,再说3.0正式版推出后,当然会有所改善。
要做的准备工作是安装一个mono1.9到windows,直接去官方网站http://www.mono-project.com上下载一个安装包,运行安装就会自动设定好运行环境。
为了编译和调试方便,没有做控制台的例子,只有一张网页。建立一个MonoLinq的Asp.net网站新项目,建项目的时候会自动加一个default.aspx,有这个就行了,在里面添加一个GridView控件
<asp:GridView id=”gridView1” runat=”server”>
这样页面就做好了。没有使用过mono的人只需要体验一下就行了,只要能运行起来,一个页面和Hello World!一样,足够了。
下面的步骤是用以下代码替换掉Default.aspx.cs中的代码:(注意要添加System.Core的引用)
//************************************************************************************************************
  using System ;
using System . Linq ;
using System . Collections ;
using System . Collections . Generic ;
using System . ComponentModel ;
using System . Data ;
using System . Drawing ;
using System . Web ;
using System . Web . SessionState ;
using System . Web . UI ;
using System . Web . UI . WebControls ;
using System . Web . UI . HtmlControls ;
namespace MonoLinq
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public class Default : Page
    {  
       public class Student {
         public string Name { get ; set ;}
         public double Score { get ; set ;}
        }
        protected GridView gridView1 ;
        protected void Page_Load ( object sender , EventArgs e ) {
            var students = new List < Student >
            {
                new Student { Name = " 张三 " , Score = 89.5 },
                new Student { Name = " 李四 " , Score = 77 },
                new Student { Name = " 王五 " , Score = 87 },
                new Student { Name = " 赵六 " , Score = 80 }
            };
            var data = students . Select ( p => p );
          
            gridView1 . DataSource = data ;
            gridView1 . DataBind ();
        }       
        protected override void OnInit ( EventArgs e ) {
            InitializeComponent ();
            base . OnInit ( e );
        }
        private void InitializeComponent () {
            this . Load += new System . EventHandler ( Page_Load );
       
        }           
 }
}
//******************************************************************************************************************* 
很快,这样程序就写完了,指定当前项目为“启动项目”,运行编译,通过了就OK了。
在哪里去运行呢?是不是还要设定IIS?没有这么麻烦!找到刚才保存项目的文件夹,在上面单击右键,会看到一个“xsp2 Web Server Here 1.9”菜单,单击它就会弹出一个命令服务窗口,代表Mono的xsp服务已经运行,不要关闭。在浏览器中输入 http://localhost:8088/Default.aspx 搞定,运行mono就是这么简单!
 
假如在SharpDevelop中运行调试也可以的,要设定一下。
工程-- >工程选项-- >应用程序-- >选“库”
工程-- >工程选项-- >编译-- >目标框架-- >选“.net framework 3.5 ”
工程-- >工程选项-- >调试- >在url中启动浏览器- >输入:http://localhost:8088/Default.aspx
另外,编译重新生成时,需要关闭xsp服务命令窗口,编译完后再打开,按启动键就可以运行调试了。
一个简单的例子,在windows中运行mono并不复杂。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
响应式编程(Reactive Programming)是一种基于异步数据流的编程范式,它的核心思想是将任何变化看作是一系列的事件流,并使用类似于观察者模式的方式进行处理。C#语言提供了许多实现响应式编程的工具,其最常用的就是Rx(Reactive Extensions)框架。 在C#,可以使用Mono开发跨平台的应用程序,并在其使用Rx框架实现响应式编程。以下是一些实现响应式编程的步骤: 1. 引入Rx框架:可以通过NuGet包管理器引入Rx框架。 2. 创建数据流:使用Observable类创建数据流。 3. 订阅数据流:使用Subscribe方法订阅数据流,并定义观察者对象。 4. 处理数据流:使用LINQ语句对数据流进行处理。 以下是一个简单的示例代码,演示了如何使用Mono和Rx实现响应式编程: ``` using System; using System.Reactive.Linq; class Program { static void Main(string[] args) { var numbers = Observable.Range(1, 10); var subscription = numbers .Where(x => x % 2 == 0) .Select(x => x * x) .Subscribe( x => Console.WriteLine("OnNext: {0}", x), ex => Console.WriteLine("OnError: {0}", ex.Message), () => Console.WriteLine("OnCompleted") ); Console.ReadLine(); subscription.Dispose(); } } ``` 在此示例,我们使用Observable类创建了一个数据流,该数据流包含1到10之间的整数。然后,我们使用Where和Select方法对数据流进行过滤和转换。最后,我们使用Subscribe方法订阅了数据流,并定义了观察者对象,以便在数据流发生变化时进行处理。在订阅期间,我们使用OnNext方法处理数据流的每个元素,在处理完所有元素后,我们使用OnCompleted方法进行清理工作。如果出现任何错误,我们可以使用OnError方法处理异常。 总之,使用Mono和Rx框架可以轻松地实现跨平台的响应式编程,帮助开发人员更有效地处理异步数据流。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值