私は書籍のリストを持っていますが、各書籍にはリンクされた著者がいます。 My Apiを使用すると、ユーザーはタイトルまたは著者のいずれかで検索できます。 APIでLinqはリストとリンクされたプロパティを検索します
私は、検索モデルを持っている
public class SearchOptions
{
public string Title { get; set; }
public string Author { get; set; }
}
ユーザーは、両方のフィールドまたは単にタイトルまたは単に作者を使用することができます。ここで
は、それは私が戻ってすべての結果を取得し、空白文字列のIE作者が完了していないときので、私は、次のLINQクエリが、その非常に適切ではないが作成されました私の私の本と著者モデル
public class Book
{
public string Title { get; set; }
public string Description { get; set; }
public Author LinkedAuthor { get; set; }
}
public class AuthorEntity
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
です。
私は文字列がnullでも空でもなく、作成者(そしてタイトルと同じ)にフィルタを適用するとほとんど言いたいのですが、Linqでこれをどうやって行うのか分かりませんか?
var returnedBooks = _bookRepository.GetAll()
.Where(x => x.Title.Contains(title) ||
(x.LinkedAuthor.FirstName + " " + x.LinkedAuthor.LastName).Contains(authorName)).ToList();
可能な複製を[ Linqオプションのパラメータ](http://stackoverflow.com/questions/10031067/linq-optional-parameters) – ASh
search-titleまたはsearch-autorがString.Emptyの場合、わからない何か?もしそうなら、照会の前に平文 'if'でこれを扱わないのはなぜですか? 'Enumerable.Empty()'を返すことができます。 –
'_bookRepository'とは何ですか?' GetAll() 'は何を返しますか?それがIQueryableでない限り、関連する結果のみを返すクエリを実行するのではなく、データベースからすべてをメモリにロードする厄介なバグがあります。次に、各著者フィールドを個別に検索してみませんか?そうであるように、各著者のために新しい一時的な文字列を生成します。クエリがデータベースにヒットした場合、インデックス作成の利点も失われます –