Создание предиката для следующего условия - PullRequest
0 голосов
/ 12 марта 2012

Я просмотрел много сообщений, но не смог найти ответ на свой вопрос.

У меня много запросов, в которых используется условие Где, как показано ниже.В коде это выглядит довольно некрасиво, поэтому я подумал об использовании предиката (не знаю, возможно ли это).

.Where(i => i.Timestamp <= date.ToUniversalTime() && i.Timestamp >= yearStart.ToUniversalTime())

Я хочу, чтобы это стало или что-то вроде этого

.WhereYearTotal(date)

чтобы условие можно было оценить в функции "WhereYearTotal".


Отредактировано:

Я уже пробовал метод расширения, но он не работает внутри вложенного запроса.например:

var query = (from o in db.tableA
        select new {
           monthly =  db.tableA.WhereYearTotal(date),
}).FirstOrDefault();

Я получаю исключительную ссылку Null.

Ответы [ 4 ]

1 голос
/ 12 марта 2012

Посмотрите на LINQKit . Я позволю вам делать именно то, что вы хотите.

0 голосов
/ 12 марта 2012

Просто напишите свой собственный метод расширения для IQueryable:

public static IQueryable<TSource> WhereYearTotal<TSource>(
    this IQueryable<TSource> source,
    DateTime date ) {
    return source.Where(i => i.Timestamp <= date.ToUniversalTime() && i.Timestamp >= yearStart.ToUniversalTime());
}
0 голосов
/ 12 марта 2012

Predicate - метод, переданный в качестве аргумента Where.То, что вы хотите, это не предикат, а метод расширения

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static IEnumerable<MyClass> WhereYearTotal(this IEnuerable<MyClass> source, DateTime date)
        {
            return source.Where(i => i.Timestamp <= date.ToUniversalTime() && i.Timestamp >= yearStart.ToUniversalTime())
        }
    }   
}
0 голосов
/ 12 марта 2012

Это делается с помощью методов расширения. Вам необходимо создать статический класс и статический метод для него.

static class MyHelper
{
    public static IEnumerable<T> WhereYearTotal(this IEnumerable<T> input, DateTime d)
    {
         return input.Where( ... )
    }
}

// usage : (the namespace for MyHelper must be in your using list)
myCollection.WhereYearTotal( DateTime.Now );
...