Linq包含功能问题

时间:2009-12-04 18:57:11

标签: linq silverlight wcf-ria-services

我使用Ria Service域服务进行数据查询。

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

然后我创建一个Filter ViewModel来捕获用户输入,根据输入,我构造一个linq Query来访问数据。

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

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

在客户端,linq Query for filter就像(我在这里使用Contains函数):

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”完全无关!

如何解决?

2 个答案:

答案 0 :(得分:1)

我在这里猜测你的错误是什么,所以这可能不适合你。

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

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

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

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

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

答案 1 :(得分:0)

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

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