Как сделать запрос с фильтром в общем списке? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть общий объект T.

Я хочу сделать запрос, сообщающий свойства, так же, как я делаю в SQL с логическим оператором или "OR column1 = 123" или "OR column2 = 123"

public ActionResult Result<T>(HttpContext httpContext, IQueryable<T> queryable, string[] columns = null)
{
    var entity = queryable;
    string searchValue = "123";

    if (!string.IsNullOrEmpty(searchValue))
    {
        entity = entity.Where(""); // columns              
        ...
    }
}

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Если у вас есть сущности

class Foo {
    public string BazFoo { get; set; }
}

class Bar {
    public string BazBar { get; set; }
}

Вы можете создать интерфейс:

public interface IBaz
{
    string GetBaz();
}

И реализуйте это вашими сущностями:

class Foo : IBaz
{
    public string BazFoo { get; set; }
    public string GetBaz() => BazFoo;
}

class Bar : IBaz
{
    public string BazBar { get; set; }
    public string GetBaz() => BazBar;
}

И вы можете использовать его следующим образом:

if (!string.IsNullOrEmpty(searchValue))
{
    entity = queryable.Where(_ => _.GetBaz() == searchValue);
    ...
}
0 голосов
/ 11 сентября 2018

Вы могли бы применить ограничение интерфейса, но, честно говоря, я бы просто не стал этого делать, если бы вы были вами, потому что это может привести к коду, который труднее читать и поддерживать.

public interface ICommonEntity
{
    string Column1 { get; }
    string Column2 { get; }
}

Заставьте любой применимый тип реализовать описанный выше интерфейс

public ActionResult Result<T>(HttpContext httpContext, IQueryable<T> queryable, string[] columns = null) where T : class, ICommonEntity
{
    var entity = queryable;
    string searchValue = "123";

    if (!string.IsNullOrEmpty(searchValue))
    {
        entity = entity.Where(_ => _.Column1 == searchValue || _.Column2 == searchValue);
        ...
    }
}
...