EF 5を使用して、複数の検索条件を結果セットに適用しようとしています(この場合、ライブラリカタログ検索の場合)。関連するコードは次のとおりです。
public IQueryable<LibraryResource> GetSearchResults(string SearchCriteria, int? limit = null)
{
List<string> criteria = SearchCriteria.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
IQueryable<LibraryResource> allResults = context.LibraryResources.Include("Type").Where(r => r.AuditInfo.DeletedAt == null);
foreach (string criterion in criteria)
{
allResults = allResults.Where(r => (r.Title.Contains(criterion) || r.Keywords.Contains(criterion) || r.Author.Contains(criterion) || r.Comments.Contains(criterion)));
}
allResults = allResults.OrderBy(r => r.Title);
if (limit.HasValue) allResults = allResults.Take(limit.Value);
return allResults;
}
サンプルSearchCriteria="歴史の時代"
何らかの理由で、最後の基準のみが適用されます。たとえば、上記のサンプルでは、タイトル、著者、キーワード、コメントに「時代」が含まれるすべての書籍が、「履歴」でフィルタリングせずに返されます。コードをステップスルーすると、ループは2回実行され、毎回適切な基準が適用されます。見えないものが見えますか?ありがとう!