2009-12-04 89 views
0

我使用Ria Service domainservice进行数据查询。Linq包含功能问题

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

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

在服务器端,默认的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))) 

当我运行t他的应用程序,我把“史密斯”用于搜索的姓氏,但结果与“史密斯”完全无关!

如何解决?

回答

1

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

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

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

这是我认为你的错误的地方。直到迭代它之后,Linq才会评估where子句。尝试将该行更改为以下内容。

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

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

0

当您在调试器中签入时,value(MyViewModel.PersonFilterVM).LastName在查询解决时是否评估为Smith?

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