Linq to Entities は、IQueryable を実装する ObjectQuery を使用します。通常は IQueryable メソッドを使用してデータをフィルタリングしますが、今日は特別な LIKE ステートメントを作成する必要がありました。フレームワークはスマートであると考え続け、特別な LIKE ステートメントを null および無効にするチルダを使用して、ワイルドカード「%」を「エスケープ」します。そのため、調べてみると、ObjectQuery には Where メソッドのオーバーロードがあり、ObjectParameters と共に文字列を渡すことができることがわかりました。これを実行しましたが、IQueryable のように実行されません。アプリケーションを実行しても、このコードがヒットした後は何も起こりません。エラーもデータベースへのヒットもないため、作成したクエリが実際には実行されていないことがわかります。
この子犬を処刑するにはどうすればよいですか?
public IQueryable<tbl_Path> GetPathsByWildCardSearch(string searchTerm)
{
return this.ObjectContext.tbl_Path
.Where("FullPath NOT LIKE @p0 and FullPath LIKE @p1",
new ObjectParameter("p0", string.Format("%{0}%{1}%", searchTerm, tbl_Path.PathSeperator)),
new ObjectParameter("p1", string.Format("%{0}%", searchTerm)));
}