1

假设我有一个表 Person(PersonID, Name, ....)。然后我使用EF创建一个Entity模型,然后基于Ria Service创建DomainService。在客户端(sliverlight),我尝试为过滤功能创建一个动态 linq。我所做的是:

q = EntityQuery<MyData.Person>
q = q.Where(p=> p.Name.Contains(NameVar));

那也行。然后我还有另外两个电话表:

Phone(PhoneID, PhoneNumber, ...)
PersonPhone(PersonID, PhoneID, ...)

然后我想添加过滤器来匹配电话号码。linq查询q怎么写?

 q = q.Where(p => p.PersonPhone.
                    Where(ph=>ph.PhoneNumber.Contains(PhoneVar)&& ph.PersonID == p.PersonID).Count()>0);

我可以通过编译,但是在运行应用程序时出现错误:不支持查询运算符“计数”

如何解决这个问题?

4

2 回答 2

0

这听起来像是在服务器上编写自定义查询方法并调用该方法而不是 Person 的默认查询的好场景。RIA 服务仅支持客户端上的一部分 LINQ 操作,但您可以在服务器上使用所有 LINQ 操作。

于 2010-03-11T09:24:23.883 回答
0

您需要使用 QueryBuilder

这是一个示例

var qb = new QueryBuilder<Person>().Where(p => p.PersonPhone.Where(ph=>ph.PhoneNumber.Contains(PhoneVar)&& ph.PersonID == p.PersonID).Count()>0);

然后,您可以使用 qb 并将其应用于您喜欢的任何查询。

query = qb.ApplyTo(query);

通过使用Func<QueryBuilder<Person>>,您可以将动态过滤器传递到通用控件等中。当您调用该函数时,您将从该 ViewModel 获取当前值。

于 2012-04-05T13:48:54.313 回答