-1

私はジェネリッククラスを持っています:

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));

誰でもこれを行う方法を知っていますか?

4

1 に答える 1