作成中の MVC アプリの検索をコーディングしています。オブジェクトのさまざまなプロパティで検索したいと考えています。この特定のケースでは、これは私の予想される動作です:
- 両方のパラメーターが null または空の場合は、すべてを返します。
- いずれかのパラメーターに値がある場合は、Contains を使用してそのパラメーターでフィルター処理されたすべてを選択します。
これは私がやっていることです:
var model = _svc.GetList(q => q.Name == (string.IsNullOrEmpty(entity.Name) ? q.Name : entity.Name) &&
q.Description == (string.IsNullOrEmpty(entity.Description) ? q.Description : entity.Description));
これは、両方のフィールドが null または空の場合はすべての要素を返すか、Name AND/OR Descriptionと完全に一致する任意の要素を返します。
ここで重要なのは、これを として動作させたいということですContains
。
これを1つのフィールドで機能させることができました:
var model = _svc.GetList(q => (string.IsNullOrEmpty(entity.Name) ||
q.Name.ToLower().Contains(entity.Name.ToLower()))).ToList();
しかし、Description フィールドを追加すると、NullReferenceException: Object reference not set to an object がスローされます。
確認するために、これを試してみましたが、どちらも機能しませんでした:
var model = (from q in _svc.GetList()
where (string.IsNullOrEmpty(module.Name) ||
q.Name.ToLower().Contains(module.Name.ToLower()))
select q).ToList();
model = (from q in model
where (string.IsNullOrEmpty(module.Description) ||
q.Description.ToLower().Contains(module.Description.ToLower()))
select q).ToList();