0

我使用 Ria Service domainservice 进行数据查询。

在我的数据库中,有一个包含名字、姓氏的人表。然后我使用 EF/RIA 服务进行数据处理。

然后我创建一个过滤器视图模型来捕获用户输入,基于它的输入,我构造一个 linq 查询来访问数据。

在服务器端,person 的默认 DomainService 查询是:

 public IQueryable<Person> GetPerson()
   {
     return this.Context.Person;
   }

在客户端,过滤器的 linq 查询类似于(我在这里使用包含函数):

if (!String.IsNullOrEmpty(this.LastName))
    q = q.Where(p => (p.LastName.Contains(this.LastName)));

生成的 linq 查询类似于(调试时,我明白了):

MyData.Person[].Where(p => (p.LastName.Contains(value(MyViewModel.PersonFilterVM).LastName) || p.Person.LegalLastName.Contains(value(MyViewModel.PersonFilterVM).LastName)))

当我运行该应用程序时,我将“Smith”作为姓氏进行搜索,但结果与“Smith”完全无关!

如何解决?

4

2 回答 2

1

我在这里猜测您的错误是什么,所以这可能对您不起作用。

在您的第二个代码片段中,您执行以下操作。

q = q.Where(p => (p.LastName.Contains(this.LastName)));

这就是我认为你的错误所在。在您迭代它之前,Linq 不会评估 where 子句。尝试将行更改为以下内容。

qWithData = q.Where(p => (p.LastName.Contains(this.LastName))).ToList();

.ToList() 调用将使用数据加载查询。

于 2009-12-05T05:21:26.590 回答
0

当您签入调试器时,是否value(MyViewModel.PersonFilterVM).LastName在解析查询时对 Smith 进行评估?

回想一下,查询在被枚举之前不会被解析。

于 2009-12-06T03:32:02.827 回答