2

エラーが発生しました:

LINQ to Entities does not recognize the method 'Int32 LastIndexOf(System.String)' 
method, and this method cannot be translated into a store expression.

このコードを使用して、人の名前が特定の文字で始まるかどうかを判断する場合:

persons = persons.Where(c => c.FullName.IndexOf(" ") > 0 &&
c.FullName.Substring(c.FullName.LastIndexOf(" ")+1).StartsWith(lastNameSearch));

LastIndexOf()を使用せずにこれを達成する方法の手がかりはありますか?ToList()を使用してデータベースから結果を取得した後、これを確認する必要があるかもしれません。

4

1 に答える 1

7

SQLクエリに変換できる一連の正規関数によって制限されるため、任意のソリューションは、正規関数が提供するものを超えない範囲で実現する必要があります。

幸い、サポートされている関数の1つはbool Contains(string)インスタンスメソッドです。小切手を次のように書き直すことができます

persons = persons.Where(c => c.FullName.Contains(" " + lastNameSearch));

これは現在のバージョンとまったく同じではありませんが(複数の名前を持つ人が2番目の名前と一致する可能性がありますが、前者は一致しないため)、かなり近く、IMHOは受け入れられます。

もちろん、可能であれば、データベース内の別の列として最後の名前を保持する方が、これよりもはるかに優れています。

于 2012-11-07T01:34:53.547 に答える