1

I have to make search through field EmployeeId. I also have parameter empId which can be something like this: '123' In my database there's next values:

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

and so on. My target - take a record which ends on empId and has no or one and more leading 0. I tried to write something like this:

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

But I get an error 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.

May be there is a workaround?

4

1 に答える 1

1

SqlMethods は、EntityFramework ではなく、Linq-To-Sql 用です。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 を変換しません) -これを参照してください詳細については質問してください。

于 2012-05-17T09:33:53.887 に答える