2012-05-17 129 views
0

我必須通過EmployeeId字段進行搜索。 我也有參數EMPID它可以是這樣的:「123」 我的數據庫中有下一個值:實體框架搜索表達式

'0123' - what I need 
'10123' 
'1234' 

等。 我的目標 - 採取EMPID其結束,並且具有無或一個更領先的0.1 我試着寫像這樣的記載:

var result = from member in MembersSet 
      where SqlMethods.Like(member.EmployeeId, "%" + empId) && 
        !(SqlMethods.Like(member.EmployeeId, "%[^0]%" + empId)) 
      select member.Id; 

但我得到一個錯誤 LINQ to Entities does not recognize the method 'Boolean Like(System.String, System.String)' method, and this method cannot be translated into a store expression.

可能有解決方法?

回答

1

SqlMethods用於Linq-To-Sql而不是EntityFramework。 EF-SqlFunctions(System.Data.Objects.SqlClient.SqlFunctions)有一個等價物。你可以使用PatIndex函數來做你想做的事。值得注意的是,這將使您的代碼具體到SQL Server。

通過使用標準的String EndsWith函數,您可以在不使用PatIndex的情況下執行初始表達式,該函數將由EF自動轉換。

var result = from member in MembersSet 
      where member.Id.EndsWith("123") 
       && SqlFunctions.PatIndex("[^0]%123", member.Id) == 0 
      select member.Id; 

如果Id的值將始終是數字(即使有前導零),你可以嘗試把它們轉換成整數的服務器上,通過定義一個額外的方法來處理解析爲int(EF不會翻譯Int32.Parse) - 有關詳細信息,請參閱this question

+0

非常有幫助,謝謝。 –