私はジェネリッククラスを持っています:
public class DataProvider<T> where T : class
{
private readonly IService<T> _service;
public DataProvider(IService<T> service) => _service = service;
public IQueryable<T> List(params string[] includes) => _service.List(includes);
}
そして今、クエリ文字列パラメーターに基づいて結果をフィルター処理したいと思います。たとえば、「Special」という単語を含むが特定のフィールドのアイテムを返したいとします。おそらく、クエリ文字列は次のようになります。
タイトル=スペシャル
linq を使用して結果をフィルタリングしたいのですが、それが可能かどうかはわかりません。listメソッドを次のように変更しました。
public IQueryable<T> List(HttpRequestMessage request, params string[] includes)
{
var queryString = request.GetQueryNameValuePairs();
var models = _service.List(includes);
// TODO: Do a contains linq query
}
そのようなルックアップを行うことは可能ですか?または、ジェネリック型を次のようなクラスに変更する必要がありますか?
public class DataProvider<T> where T : Availability
{
private readonly IService<T> _service;
public DataProvider(IService<T> service) => _service = service;
public IQueryable<T> List(HttpRequestMessage request, params string[] includes)
{
var queryString = request.GetQueryNameValuePairs();
var models = _service.List(includes);
// TODO: Do a contains linq query
}
}
それでも、プロパティを動的に検索するにはどうすればよいですか? 私はこのようなものを持っていました:
foreach (var item in queryString)
models = models.Where(m => m.GetType().GetProperty(item.Key).GetValue(m).ToString().Contains(item.Value));
誰でもこれを行う方法を知っていますか?