假设我有一个表Person(PersonID,Name,....)。然后我使用EF创建实体模型,然后基于Ria Service创建DomainService。在客户端(sliverlight),我尝试为过滤器功能创建动态linq。我做的是:
q = EntityQuery<MyData.Person>
q = q.Where(p=> p.Name.Contains(NameVar));
没关系。然后我又有两张电话桌:
Phone(PhoneID, PhoneNumber, ...)
PersonPhone(PersonID, PhoneID, ...)
然后我想添加过滤器以匹配PhoneNumber。如何编写linq查询q?
q = q.Where(p => p.PersonPhone.
Where(ph=>ph.PhoneNumber.Contains(PhoneVar)&& ph.PersonID == p.PersonID).Count()>0);
我可以通过编译,但在运行应用程序时,我收到错误: 不支持查询运算符'Count'
如何解决此问题?
答案 0 :(得分:0)
这听起来像是在服务器上编写自定义查询方法并调用该方法而不是Person的默认查询的好方案。 RIA Services仅支持客户端上的LINQ操作子集,但您可以使用服务器上的所有LINQ操作符。
答案 1 :(得分: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获取当前值。