数据点-WCF服务中的LINQ投影查询和替代方案

上个月当我的本地 .NET 用户组的演示者正在课堂上写 LINQ 查询时,我问他 ,“以前没有 LINQ 的时候,我们是怎么过的”?他回答说,“真是难以想象” 。

这是真的。自从 2008 年 LINQ 被引入 Visual Studio 后,它对我们在 Microsoft .NET Framework 中的编程方式产生了如此 重大的影响。与 Visual Basic 和 C# 中引入的许多新的语言功能相结合,LINQ 可以前后一致地解决查 询内存中对象和数据来源的问题。

LINQ 具备将形状随机的数据投影到匿名类型的功能,这种功能既有好的一面 ,也有不好的一面。如果您只需要获取数据的特定视图,而不必为此一次性的类 型声明新类,匿名类型是一个不错的解决方案。LINQ 的投影和匿名类型的确是把 我们宠坏了。那么,为什么我说,它们也有不好的一面呢?

如果您曾经将 LINQ 投影用于需要将数据返回另一方法的某种方法,或者更糟 糕,将 LINQ 投影用在 Windows Communication Foundation (WCF) 服务操作中 ,对此您可能会有所了解。

原因即在于匿名类型是一次性类型,它们没有声明,只有创建它们的方法可以 理解它们。如果您写了一个返回一列匿名类型的查询,因为没有办法表达“匿名 类型”,所以没有办法定义某个方法参数,说:“我将返回一列...”。

以下是一个采用简单投影的 LINQ to Entities 查询:

var custQuery = from c in context.Customers

          select new {c.CustomerID,  Name=c.LastName.Trim() +

          ", " + c.FirstName};

在运行时,custQuery 变量将实际成为某个 ObjectQuery<<>f__AnonymousType0<int,string>>。

有了 var(以及 Visual Basic Dim 的替代使用)我们不再需要找到这种非类 型的表达方式。

如果您想从某个方法返回该查询的结果,唯一合理的解决方案是创建代表要返 回的类型的类。不过,这样做,提供匿名类型将毫无意义。现在您必须写更多的 代码,定义类,还可能需要定义容纳新类的新项目,并确保使用这些类的程序集 能访问到它们等等。

最近,数据服务又给出了一道难题。为了对数据进行投影,您必须在服务中创 建自定义的操作,执行自己的查询,然后返回某一预先定义的、可以为客户端理 解的类。

在您处理服务时,很多情况下您都希望在无需通过线路移动大规模类型的情况 下,处理数据的特定视图。

为了满足这一临时性要求,除了在您的域中创建额外的类型之外,您还有更多 的选择。

WCF 数据服务中的新投影功能

.NET Framework 3.5 SP1 的数据服务更新为 WCF 数据服务引入了少数几个强 大的功能,这也是 .NET Framework 4 的组成部分。这些功能中就有针对数据服 务在查询中使用投影的功能。强烈建议您查看 WCF 数据服务团队的博客帖子 (blogs.msdn.com/astoriateam/archive/2010/01/27/data-services-update- for-net-3-5-sp1-available-for-download.aspx),以了解这次更新的所有新功 能。

数据服务 URI 语法中添加了 $select 运算符。它允许使用属性甚至是导航属 性投影。

下面简单举例说明了随 SalesOrderHeaders 导航属性获取客户的几个标量属 性的投影:

http://localhost /DataService.svc/Customers(609)
  $select=CustomerID,LastName,FirstName,SalesOrderHeaders&$expand=
  SalesOrderHeaders

时间: 2024-12-03 01:47:48

数据点-WCF服务中的LINQ投影查询和替代方案的相关文章

WCF服务中元数据的地址问题

初用WCF的朋友可能会遇到这样的问题,就是在使用svcutil.exe生成proxy和config的时候,或者利用add service reference添加引用的时候,部署的WCF服务到底它的metadata是什么.或者换句话说,svcutil的URL参数,以及添加服务引用时候的那个Address,到底应该填什么. 在这里我用两个最常用的Binding方式,WSHttpBinding和NetTcpBinding,分别以实际的例子来进行说明. 建立服务契约 在这里就从MSDN上抄一个四则运算的

Post请求Json格式数据到WCF服务

测试实体类:(需要在客户端和服务端建了有相同字段名称的实体) public class CompositeType    {        public CompositeType()        {            SubCompositeTypes = new List<SubCompositeType>() { new SubCompositeType() };        }        public bool BoolValue { get; set; }       

jQuery实现ajax调用WCF服务的方法(附带demo下载)_jquery

本文实例讲述了jQuery实现ajax调用WCF服务的方法.分享给大家供大家参考,具体如下: 关于AJAX调用WCF服务分为跨域和不跨域两种方式,今天咱们先介绍下不跨域下的调用方法.DEMO是在VS2008写的. 经过测试与研究,发现AJAX调用WCF服务必须满足以下条件 1.wcf的通讯方式必须使用webHttpBinding 2.必须设置<endpointBehaviors>节点的值 3.服务的实现必须添加标记 复制代码 代码如下: [AspNetCompatibilityRequirem

关于”System.ServiceModel.Activation.WebServiceHostFactory“与&quot;&lt;webHttp/&gt;&quot;以及RestFul/启用了Ajax的WCF服务

N久以前,曾看到园子里有一些wcf爱好者总是问:为啥启用了ajax的wcf对应的svc总要加一句Factory=System.ServiceModel.Activation.WebServiceHostFactory 昨天无意在网上闲逛时,发现了msdn官方的解释,转贴于此,希望对大家有帮助: 原文地址: http://msdn.microsoft.com/zh-cn/bb885100.aspx 创建不使用 ASP.NET 的 WCF AJAX 服务 Windows Communication

Geneva框架:构建基于声明的WCF服务的更好方法

本文基于"Geneva"框架的预发布版本撰写而成.所有信息均有可能发生变更. 本文使用以下技术: Windows Communication Foundation "Geneva"框架(以前称为"Zermatt")是用于构建基于声明的应用程序和服务以及实现联合安全方案的新框架代号.它的功能包括用于构建自定义安全令牌服务 (STS) 的探测功能.要求从 ASP.NET 应用程序进行联合身份验证的机制,以及简化 ASP.NET 应用程序和 Windo

WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计

上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依据?面向对象的设计经验有何值得借鉴的地方?这里我们会一一给出详细的介绍.本文首先介绍的是WCF服务中契约继承的一些概念.例子代码分析,其次来讲解服务契约的设计问题.首先介绍的也是进行服务设计的必要性,服务设计的原则,示例代码分析.最后是全文的总结部分.结构如下:[1]OO面向对象设计原则,[2]服务

WCF服务引用后,识别不了

问题描述 我写了一个WCF服务,如果在同一个解决方案里面,客户端可以正常的添加引用WCF服务并调用服务端的接口,如下图1.但是如果我用另外一个项目去引用WCF服务,虽然能够引用服务,但是调用不了WCF服务中的接口,如图2和图3[图1][图2][图3] 解决方案 解决方案二:你在另外一个项目的app.config查找IPlateService,看对应的Namespace*****************************************************************

WCF分布式开发步步为赢系列的(6):WCF服务契约继承与分解设计

上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依据?面向对象的设计经验有何值得借鉴的地方?这里我们会一一给出详细的介绍.本文首先介绍的是WCF服务中契约继承的一些概念.例子代码分析,其次来讲解服务契约的设计问题.首先介绍的也是进行服务设计的必要性,服务设计的原则,示例代码分析.最后是全文的总结部分.结构如下:[1]OO面向对象设计原则,[2]服务

云计算服务中的隐患:隐私保护

盘点云计算服务中的隐患据世界隐私论坛近日发布的一份报告声称,如果企业期望通过利用云计算服务来降低IT成本和 复杂性, 那么占先应确保在这个过程中不会带来任何潜在的隐私问题.你一旦把数据交给外人存储,就会面临潜在问题.企业可能常常甚至不知道自己的数据到底存储在什么地方.信息有时最终出现在多个地方,每个地方可能需要遵守不同的隐私需求.一心想通过云计算服务削减成本的用户往往会 忽视这类问题,需要在合同中阐明隐私保护方面的内容.那么是不是我们就对云计算可能存在的风险而对其避而远之呢?事实上,任何创新都会