Ошибка C # при использовании явно определенного предиката - PullRequest
2 голосов
/ 10 мая 2011

У меня есть несколько лямбда-выражений, которые будут использовать один и тот же предикат в предложении where. Поэтому я использую тип предиката в первый раз. Вот что у меня есть ...

Predicate<Type> datePredicate = o => o.Date > DateTime.Now.AddDays(-1);

Когда я использую его в своем запросе (ниже), я получаю следующую ошибку ..

Ошибка:

The type arguments for method 'System.Linq.Enumerable.Where<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,int,bool>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

Использование:

Type t = collection.Where(datePredicate).SingleOrDefault();

Кто-нибудь знает, что я делаю неправильно?

Ответы [ 2 ]

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

Попробуйте это:

Func<MyObject, bool> datePredicate = (o => o.Date > DateTime.Now.AddDays(-1));

collection.Where(datepredicate);

Также, когда вы делаете .SingleOrDefault(), не уверен, как это волшебным образом превратится в Type, поскольку ваш List<T> не List<Type>, насколько я знаю (поскольку Type не имеет Date свойство).

0 голосов
/ 10 мая 2011

Компилятор не может статически определить, какой Type ваш o параметр.Я бы предположил, что o имеет тип DateTime.Компиляторы не делают предположений:)

Predicate<DateTime> datePredicate = o => o.Date > DateTime.Now.AddDays(-1);

Попробуйте.

...