使用显式定义的谓词时出现 C# 错误

本文关键字:错误 谓词 定义 | 更新日期: 2023-09-27 17:55:36

我有许多 lambda 表达式将在 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();

有谁知道我做错了什么?

使用显式定义的谓词时出现 C# 错误

试试这个:

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

此外,当您做.SingleOrDefault()时,不确定这将如何神奇地变成Type,因为据我所知,您的List<T>不是List<Type>(因为Type没有Date属性)。

编译器

无法静态计算出o参数是什么Type。我认为o属于DateTime型。编译器不会做出假设:)

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

试试看。