RSS 2.0 Feed
2007-11 Entries
摘要:[原文作者]:Amanda Silver, Paul Vick, Scott Wisniewski [原文链接]:Lambdas, and Take While, and Group By, Oh My!   太棒了,Visual Basic 2008 Beta2版本将于今天发布 ,即将回归到我们用户所热爱的桌面上,这个自然的栖息地。(请大家注意在登陆界面上GPM 微笑的脸哦,--- Beta 版本的完成使他格外的开心。) 新版本到底有什么新玩意呢?加入了比之前Beta1版本更多的新特性,能否列举一些呢?这里有个关于Beta2 版本VB Language详细的清单: Query 操作符:  Group By, Group Join, Take (While), Skip [While], Aggregate, Count, Sum, Min, Max, Average, From->Let Nullable 支持 Lambda 表达式(aka inline Funcitons) Partial 方法—ScottGu 前几天提起过,ScottWis前几周也发表过一些这方面的资料。 Anonymous 类型 w/Keys-这个PaulV已经开始讨论这些了。 这里是一些查询语句的例子,好了你现在就可以开始用VB写代码了!   ' Find suppliers in the same city as customers From cust In db.Customers _ Join sup In db.Suppliers _ On cust.City Equals sup.City _ Select cust.CompanyName, sup.ContactName, cust.City   ' Find suppliers in the same city, with the same postalcode as customers From cust In db.Customers _ Join sup In db.Suppliers _ On cust.City Equals......[阅读全文]

posted @ | Feedback (4) | Filed Under [ VB Team Blog ]

假如现在你有一个用Visual Studio 2005 开发的应用程序你想进一步挖掘和转换它,并开始使用VS2008中的 LINQ功能。那么在这里,我打算简单介绍下使LINQ正常工作, 你需要什么步骤, 这些步骤也同样取决于你需要用到LINQ的什么功能。

posted @ | Feedback (12) | Filed Under [ Beth Massi的blog ]

摘要:[原文作者]:Beth Massi [原文链接]:Another Way to LINQ   我曾经在ScottGu的博客上读过他的部分文章,是关于在ASP.NET中LinqDatasource数据源如何使用LINQ to SQL的。文章浅显易懂,想必Scott为此花了不少的心思,如果你之前没有读过他的一些文章那么你最好花点时间去读一读,这会对你非常有好处的。而且他在例子中分别使用了VB和C#代码。下面我要着重介绍的一个例子是关于使用Lambda表达式得到每样产品的总价:   Dim products = From p In db.Products _                  Where p.Category.CategoryName.StartsWith("C") _                  Select p.ProductID, _                    p.ProductName, _                    p.UnitPrice, _                    NumOrders = p.Order_Details.Count, _                    Revenue = p.Order_Details.Sum(Function(details) _                              details.UnitPrice * details.Quantity)   在这里,我们所使用的lambda用关键字”Function”来标识,它被用在了这个叫”Sum”的扩展方法里,其目的是完成对每样产品总价的计算。在VB 9里面我们也可以使用"Aggregate"来完成同样的功能。 另外,我们可以在Where子句中使用”Like”,这种用法和上面的作用是相同的:   Dim products = From p In db.Products _                Where p.Category.CategoryName Like "C*" _                Select p.ProductID, _                 p.ProductName, _                 p.UnitPrice, _                 NumOrders = p.Order_Details.Count, _                 Revenue = _                    Aggregate detail In p.Order_Details _                    Into Sum(detail.UnitPrice * detail.Quantity) VB 9 提供了很多其他的比较通用的LINQ表达式,这样你就省去了手动再写一遍的时间,例如求和Sum, 取最小值Min, 最大值Max, 取平均Average等等。 我个人比较喜欢那些容易理解的VB 表达式句法,因此我更倾向于使用这些已有的。 如果你希望了解更多的有关Query的信息,我们为你准备了一些视频   希望大家能够从中发现乐趣!...[阅读全文]

posted @ | Feedback (5) | Filed Under [ Beth Massi的blog ]

提到LinQ,我最喜欢的应用之一是用她查询元数据(Metadata)以编写灵活的程序。或者反过来,用LinQ迅速地创建自己的object的元数据。基本上,元数据就是“描述数据的数据(data about data)”,比如描述内容的信息。在这里我想通过一个简单的例子来展示如何应用数据库里的信息描述窗体上的控件;然后,我会创建一些描述这些控件信息的XML数据

posted @ | Feedback (4) | Filed Under [ Beth Massi的blog ]

摘要:多窗体之间数据处理 [原文作者]: Beth Massi [原文链接]: Using Data Across Multiple Windows Forms     最近我遇到很多关于多窗体之间数据交互处理的问题,如果你已经看过我的Forms over Data系列课程,你应该了解到:怎样建立一个database、连接它、保存你的数据、以及在代码中操作数据。这篇文章是对那些课程的扩展,这里我将利用一个示例描述怎样基于一个DataSet创建多窗体程序,我们将利用Northwind数据库中的Catagories表和Products表作为示例。   根据具体情况,实际上有很多方法可以将多个窗体连接到同一个DataSet上,这里我将用一个比较典型的例子来说明一下:从一个表格窗体中显示可编辑的详细信息窗体,如下图所示:   首先建立一个工程,将Form1窗体(也就是主窗体)的Text属性设置为Catagories and Products。 通过数据源窗口新建一个Data Source对象;选择SQL Server Database File,数据库为Northwind.mdf,选择Categories 和 Products两个表,将DataSet名称设为CategoriesProductsDataSet。 完成以后会有一个CategoriesProductsDataSet.XSD被创建(参见One-to-Many video)。当DataSet创建完成后,将CategoriesProductsDataSet中Categories 和 Products两个表从数据源窗口拖拽到Form1窗体中(注意:Products为Categories下面的节点)。 此时主窗体中的两个DataGridView将分别显示Categories和其相关的Products信息,窗口底部将会创建两个BindingSource,并且它们被绑定到了相应Grid的DataSource属性中,与此同时,有一个BindingNavigator工具条出现在窗体上。现在我们想要做的是创建第二个窗体以编辑产品的详细信息。 我首先对Categories 表和......[阅读全文]

posted @ | Feedback (0) | Filed Under [ Beth Massi的blog ]

摘要:[原文作者]: Timothy Ng [原文链接]: Lambda Expressions and Expression Trees   大家好,我是Tim, 是VB编译器组的组长。最近Amanda极力劝说我到VB组的博客上而不是我自己的博客上发表文章。所以我现在就在这里写了。我现在的计划是将与VB有关的文章贴在这,更多关于功能实现/技术/有趣的东西放到我自己的博客上 (比如,那些和VB语言/特性 无关的东西) 最近我的关于Lambda表达式的文章被发表在MSDN杂志上。在此篇文章中,我将那篇文章中的某些理念做一个拓展。如果你们对这篇文章中有什么不理解的,尽可以参考那篇文章。   Lambda表达式非常cool不但是因为那篇文章中所说的原因,而且我们还可以从可读性很强的表格中获取Lambda表达式的内容,就像是在看数据一样,而不是可执行代码。比如,下面这行代码将一个lambda表达式转换为一个可调用委托:  Dim f As Func(Of Integer, Integer) = function(x) x * 2 Dim r = f(10)  这个示例的第一行生成一个Lambda表达式,并将其奇迹般地赋给一个可调用委托f,第二行调用f, 并返回值20.   这非常酷,我的文章将说明,为什么我认为它很酷。其实有更酷的,那就是事实上你可以将Lambda表达式赋给特殊变量类型,而编译器会帮你做很神奇的处理:  Dim e As Expression(Of Func(Of Integer, Integer)) = function(x) x * 2  在这个代码示例中,e不是一个可调用委托,而是表达式树。表达式树是lambda表达式的一种数据表示形式,它能使你更方便地读取和推断Lambda表达式。 如果你深入探究调试器里的e的值,你会很容易地发现表达式是整型变量x与整型常量2的乘积操作。 默认情况下,拓展了Ienumerable接口的表达式能被赋给Lambda表达式;而拓展了Iqueryable接口的查询表达式只能被表达式树赋值。因此,当你生成一个带IQueryable类型查询的时候,编译器将生成一个表达式树而不是Lambda表达式。     在这个问题上,我组里的一个开发人员,Scott,曾经写过一篇很好的文章。他在那篇文章里用了非常好的图表来表现说明一些Lambda树的表达式树表示形式。   你能用表达式树做些什么呢?   大致上,你可以做两件事:   1.        推断表达式树内数据,并对它做自定义处理。你也能将表达式树中的数据转换到其他的域的数据形式(如XML).   2.        用 .Compile() 方法去将一个表达式树转换为一个委托,然后你可以执行它。   3.        编译包含动态条件的查询:参考Jonathan’s的文章,写的非常好的。他举出了大量的例子告诉你如何巧妙地处理那些表达式树和编译你的带自定义条件的lambda表达式。    其中第二条是很有趣的,因为它意味着你能将一个lambda表达式复制进一个表达式树,推断它,并将它转换为一个可调用委托。   Dim e As Expression(Of Func(Of Integer, Integer)) = function(x) x * 2 Dim f = e.Compile Dim r = f(10)    在这个示例中,变量r的值是20,和我们之前举的将lambda表达式直接赋给一个委托类型得到的结果一样。    这个为什么说它有趣呢?   没有表达式树的话,我们是不可能用描述格式来表示一个表达式的。他们唯一的表示方式是IL (中间语言), 这种语言对于重新表述用户的意图来说太低层次了。然后,表达式树对一个表达式提供了一个高级的树表示方式来表现表达式,这样你就能很容易地理解用户的该表达式的意图。   如下是一些可能比较有趣的表达式树的用法:   1.        推断表达式,然后将他们转换为委托并调用他们; 2.        将表达式转换为SQL, 这样他们就能被服务器执行了 (这是linq到sql所做的工作) 3.        将表达式转换为XML并将他们写到磁盘上; 4.        将表达式转换为自定义形式并将他们通过某种网络协议发送到能将之通过某种格式重编译为表达式树,重新生成表达式分析并执行他们的服务器上。  在后面的几篇文章中,我将特别讲述关于VB编译器生成的表达式树,以及VB树与C#树之间的区别以支持VB同语义学。 我也将对你们能做的事情给出一些小技巧,这样任何你们所写的用到表达式树的类库将为VB开发程序员提供最好的体验。...[阅读全文]

posted @ | Feedback (1) | Filed Under [ VB Team Blog ]

摘要: [原文作者]: Young Joo [原文链接]: New Data Tools Features in Visual Studio Orcas 下面是 Visual Studio 2008中数据工具方面新特性的列表。 首先让我们了解一些术语。 O/R Designer——对象—关系设计器 LINQ——语言集成查询 Hierarchical Update——级联更新 N –Tier——多层架构 SQL Compact Edition/ SQL CE——SQL精简版 DataSet——数据集 Typed DataSet——强类型数据集 Local Data Cache——本地数据缓存 对象—关系设计器(O/R Designer) 对象—关系映射技术允许您将关系数据库映射为对象。 一旦完成映射,您就可以将他们当成普通对象来处理,无需编写复杂的数据访问逻辑就可以轻松地将更改提交回数据库。对于这种增强型的数据访问技术,目前已有许多不同的实现机制。 但是,综观目前O/R 映射实现工具,并未带有易于创建和修改映射的图形设计器。 Visual Studio 中的对象-关系设计器正是Microsoft处理对象—关系到底应该如何映射的回答。 图形设计器它允许您轻松地将数据库对象,如表和存储过程映射为 LINQ到SQL的类和方法。只需将数据库对象从数据库管理器拖放到设计器。 设计器就会自动创建映射并生成正确的 LINQ到SQL的代码。您还可通过设计器修改映射的不同方面的配置,设计器会自动更新代码。关联和继承关系也很容易地创建。支持存储过程这一特性也很独特。对于INSERT、UPDATE和DELETE操作,您可以基于存储过程作为对象映射的方法来替代默认的操作。 如果您已经体验过三月份的LINQ的CTP版本,您可能记得那时我们提供的对象—关系设计器叫做DLinq 设计器。这就是下一代对象-关系设计器的预览版,目前更名为O/R设计器。 posted @ | Feedback (8) | Filed Under [ VB Team Blog ]

摘要:[原文作者]: Paul Yuknewicz [原文链接]: Why you should learn WPF (and how I can help)   几个星期之前,我提到我现在所从事项目的部分工作。接着足球,网球和开学采购旺季…喔!我知道我不该转移话题,不过剩余的部分我不能再多说了。现在,我已经开始把 Charles Petzold 所写的《Applications = Code + Markup》一书中的所有代码示例整理出来,再用VB重写这些代码并发布到VB社区。我也邀请了一帮家伙做同样的事情,因为这是学习WPF的好方法,然而为了客户,今后几年我将关注(小型程序开发者以及IT部门),这是隐藏在我疯狂行为身后的原动力;特别是对那些一直在使用VB6的家伙们。 同我共事的项目经理Paul Yuknewiczu促使我联系Charles并和他达成协议,允许我发布他书中所有的示例代码的VB版。在家时我已经使用VB重写了十个章节的示例代码,但为了达到我所要求的代码质量,我必须重头再来一遍。 所以今天我在附件中向你们提供第一章节的示例代码。另外,我在Visual Studio 8 beta 2中创建了相关的项目文件以鼓励你们下载最新的代码。 出于下述的几个理由,我邀请你们同我一起进行WPF的学习之旅。 1.        我一直认为VB是要用来快速创建应用程序的。WPF 是一个非常强大的技术,我期待建立的社区里面有着一堆这样的程序员,他们相互分享最终用户体验的各种想法,比如不再使用灰色的窗体和白色的文本框。 2.        我们花费了大量的投资在Silverlight上。随着时间的推移,Silverlight也在不断的完善,不久的将来,使用WPF创建的强悍的桌面应用程序只需做些小小的努力就能转变成Silverlight程序。 昨天,我们一伙人把自己反锁在房间里琢磨如何为小型程序开发者和IT部门改善Visual Basic。此前我曾说过, 我们正在寻求这方面的人,希望能从他们那里了解更多关于使用VB快速开发应用程序时的痛处。现在,我们将更进一步。不管你在哪,只要你愿意贡献一点时间帮助我们定制我们的产品,请联系我(patd@microsoft.com) 最后,在我去和我的孩子们进行足球游戏之前,我想提醒大家,我们已经建立了一个小型程序开发人员论坛。欢迎大家来这里分享经验或者提问。 Patrick Dengler 附件:AppsCodeMarkup_VB.zip...[阅读全文]

posted @ | Feedback (5) | Filed Under [ VB Team Blog ]

我们论证了如何利用WCF、代理类型重用(ProxyTypeSharing)和其他的新功能来组织数据层。最后的结果是:我们可以用最短的时间创建一个强大的应用程序。不过,这只是WCF最普通的应用而已。

posted @ | Feedback (14) | Filed Under [ VB Team Blog ]