2010-10-29 60 views
2

我正在使用linq2sql轉換項目以使用odata源。我想查找這樣的用戶...在OData中查詢

FrameworkEntities db = new FrameworkEntities(
    new Uri("http://localhost/odata/FrameworkService.svc")); 
User user = db.Users.Where(
    u => SqlMethods.Like(u.UserName, UserName)).FirstOrDefault(); 

,但我得到錯誤「方法‘布爾贊(System.String,System.String)’不能在客戶端上使用;它僅適用於轉換爲SQL「。這在linq2sql中是可能的,所以我只是想知道如何改變它,以便它可以與odata服務一起工作。我還沒有找到任何有關它的文章。

回答

2

像錯誤說的那樣,SqlMethods.Like()用於轉換爲SQL。 oData查詢不會被轉換爲SQL,因此您不能使用該方法。您最好的選擇是使用IndexOf與StringComparison.InvariantCultureIgnoreCase來模擬String.Contains的不區分大小寫的版本。

哦...你可以將呼叫結合 WhereFirstOrDefault

User user = db.Users 
       .Where(u => u.UserName.IndexOf(Username, 
        StringComparison.InvariantCultureIgnoreCase) > 0) 
       .FirstOrDefault(); 
+0

@rushonerok - 修改,以符合您的評論。 – 2010-10-29 13:48:48

0

的OData確實含有substringof功能。對於我最近處理的一個小型項目,我擔心數據模型的三個屬性中是否存在數據「LIKE」字符串。

$filter=(IN_OUT eq '0' and (substringof('D20033', toupper(BENEFICIARY)) or substringof('D20033', toupper(ORIGINATOR)) or substringof('D20033', toupper(MEMO)))) 

我還與大寫形式輸入的搜索字符串,以便我有一個不區分大小寫的搜索中使用的toupper函數會圍繞模型的屬性結合。所以在這裏,我擔心IN_OUT在三個字段中的一個或多個字段中爲'0'和'D20033',這三個字段是受益人,起始者或備忘錄。