DataServiceContext & Linq:只选择继承的对象
Posted
技术标签:
【中文标题】DataServiceContext & Linq:只选择继承的对象【英文标题】:DataServiceContext & Linq: Select only inherited objects 【发布时间】:2011-08-04 10:14:04 【问题描述】:我使用 WCF DataSerice 和 EF4.1 代码优先 (C#)。
我有 2 个实体: 1人 2. 继承自Person类的用户
我只想从 DbSet Persons 中获取用户对象。我怎样才能做到这一点? 然后我像这样查询数据服务:
service.CreateQuery<User>("DbPersons").OfType<User>().Execute();
我收到数据服务上下文不支持 OfType 方法的异常。
将 Linq 表达式转换为 URI 时出错:不支持方法“OfType”。
【问题讨论】:
您使用的是什么版本的数据服务。 .NET 4.0 附带的标准版本不支持OfType
运算符。
你好,我试过任何版本(包括CTP2)
你在六月 CTP 上试过了吗? blogs.msdn.com/b/astoriateam/archive/2011/06/30/…
刚刚试了一下。我之前在这里描述过另一个问题***.com/questions/6371243/…
现在我得到这个异常'System.InvalidOperationException:客户端和服务之间存在类型不匹配。类型“Crm.Objects.Departament”不是实体类型,但响应负载中的类型表示实体类型。请确保客户端上定义的类型与服务的数据模型匹配,或者更新客户端上的服务引用。在 System.Data.Services.Client.Ato'
【参考方案1】:
好的,通过添加服务操作方法解决。 在此处查看解决方案http://msdn.microsoft.com/en-us/library/cc668788.aspx
这是我的代码:
public static void InitializeService(DataServiceConfiguration config)
config.SetServiceOperationAccessRule("DbUsers", ServiceOperationRights.AllRead);
[WebGet]
public IQueryable<User> DbUsers()
return CurrentDataSource.DbPersons.OfType<User>();
并在您的客户端应用程序中照常发送请求:
service.CreateQuery<User>("DbUsers").Execute();
【讨论】:
以上是关于DataServiceContext & Linq:只选择继承的对象的主要内容,如果未能解决你的问题,请参考以下文章
要求的参考折叠规则的简明解释:(1) A& & -> A& , (2) A& && -> & , (3) && &a
Java String 将 '&' 替换为 & 而不是 & 到 &