Как включить выражение <Func <T, TPropertyType >> в мой IQueryable? - PullRequest
1 голос
/ 25 мая 2011

Я добавил метод в наш базовый класс обслуживания, чтобы получить все неэкспортированные экземпляры определенного элемента (элемент типа T)

    public virtual IEnumerable<T> UnexportedToSun()
    {
        var query = GetIQueryable();
        query = query.Where(x => x.SunExportDate == null);
        return query.ToList();
    }

Это сработало хорошо ... однако мы получилипара новых случаев, когда нам нужно передать немного запроса.

То, что я хотел сделать, это использовать синтаксис

Expression<Func<T, TPropertyType>> 

, чтобы я мог делать такие вещи, как это ...

var transportInvoices = _purchaseInvoiceService.UnexportedToSun(x => x.InvoiceType == InvoiceType.Transport);

Вышеописанное сработало так, как я себе представлял ... но я не уверен, куда идти ...

    public virtual IEnumerable<T> UnexportedToSun<TPropertyType>(Expression<Func<T, TPropertyType>> otherQuery)
    {
        var query = GetIQueryable();
        query = query.Where(x => x.SunExportDate == null);
        query = query //TODO: Add my other query
        return query.ToList();
    }

Может кто-нибудь указать мне правильное направление, пожалуйста

1 Ответ

3 голосов
/ 25 мая 2011

Если вам просто нужно добавить больше фильтров, вы можете снова вызвать Where:

var query = GetIQueryable();
query = query.Where(x => x.SunExportDate == null);
query = query.Where(x => x.IsHappy);
return query.ToList();

Это одна из приятных функций LINQ - она ​​ компонуется , поэтому вы можете создать блок с помощьюблок.Вы могли бы делать и другие вещи ... например:

var query = GetIQueryable();
query = query.Where(x => x.SunExportDate == null);
query = query.Select(x => x.ValueA + x.ValueB);
return query.ToList(); // Will return a List<int> or whatever instead

Для фильтра общего назначения вам нужно выражение, возвращающее bool ::

public virtual IEnumerable<T> UnexportedToSun(Expression<Func<T, bool>> predicate)
{
    var query = GetIQueryable();
    query = query.Where(x => x.SunExportDate == null);
    query = query.Where(predicate);
    return query.ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...