2009-12-04 128 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?

回想一下,查詢在枚舉之前不會解析。