如何将Linq与实体和WCF数据服务的数据连接起来?

时间:2012-01-30 00:52:48

标签: c# linq entity-framework linq-to-entities wcf-data-services

我有4个相关的实体如下:

LocalAgency<-0..1----1->Agency<-0..1----1->Organization<-0..1----1->Customer

换句话说,LocalAgency有一个相关Agency等。数据模型使用Entity Framework设置(包含导航属性以细读这些关系)和WCF { {1}}设置为向客户提供该数据。

在使用DataService的客户端上,我试图根据客户名称返回本地代理商的查询,但是没有找到支持的方式来制定这个简单的查询。

我尝试的第一种方法是使用DataService,如下所示:

Expand

如果“join”只有1级深度,则此方法有效,但无法获得导航属性的导航属性。

然后我尝试了var items = (from i in Context.LocalAgencies.Expand("Agency").Expand("Organization").Expand("Customer") where (String.IsNullOrEmpty(CustomerName) || i.Agency.Organization.Customer.CustomerName.Contains(CustomerName)) select i).Skip(StartIndex).Take(PageSize).ToList<LocalAgency>(); 如下:

join

但是,此实例不支持var items = (from localAgency in Context.LocalAgencies join agency in Context.Agencies on localAgency.CustomerID equals agency.CustomerID join organization in Context.Organizations on localAgency.CustomerID equals organization.CustomerID join customer in Context.Customers on localAgency.CustomerID equals customer.CustomerID where (String.IsNullOrEmpty(CustomerName) || customer.CustomerName.Contains(CustomerName)) select localAgency).Skip(StartIndex).Take(PageSize).ToList<LocalAgency>();

然后我尝试使用join方法,如下所示:

Except

但是,此实例不支持IQueryable<LocalAgency> items = Context.LocalAgencies; items = items.Except(from i in items where (String.IsNullOrEmpty(CustomerName) || i.Agency.Organization.Customer.CustomerName.Contains(CustomerName)) select i).Skip(StartIndex).Take(PageSize);

我错过了什么?我是否需要在Except侧设置一些内容以允许在定义的导航属性中进行简单连接?

1 个答案:

答案 0 :(得分:2)

我在Expand上使用了错误的语法。我做了以下事情:

var items = (from i in Context.LocalAgencies.Expand("Agency").Expand("Agency/Organization").Expand("Agency/Organization/Customer")
where (String.IsNullOrEmpty(CustomerName) || i.Agency.Organization.Customer.CustomerName.Contains(CustomerName))
select i).Skip(StartIndex).Take(PageSize).ToList<LocalAgency>();