假设我有一些C#代码看起来像这样:
最初的回答:我不知道具体细节,但我相信解决这个问题的方法可能是将我的
最初的回答
var query1 = query.Where(x => x.BirthDate > now);
var query2 = query.Where(x => x.EnrollmentDate > now);
var query3 = query.Where(x => x.GraduationDate > now);
实际代码更加复杂,但我使用了一个简单的例子。我将这段代码传递给Entity Framework。
假设我看到这段代码并说:“这不够DRY”,然后我写了一个像这样的函数。
最初的回答:
原始代码比较繁琐,但我使用了一个简单的示例。我将这段代码传递给Entity Framework。
假设我看到这段代码并认为:“这段代码不够简洁”,然后我编写了以下函数。
public IQueryable<Student> FilterAfterDate(IQueryable<Student> query,
Expression<Func<Student, DateTime>> GetDateExpression, DateTime now)
{
return query.Where(x => GetDateExpression(x) > now);
}
在运行时,这会产生以下错误:
最初的回答:
The LINQ expression node type 'Invoke' is not supported in LINQ to Entities.
最初的回答:我不知道具体细节,但我相信解决这个问题的方法可能是将我的
FilterAfterDate
,它是Expression<Func<Student, DateTime>>
,与日期比较结合起来,生成一个类型为Expression<Func<Student, bool>>
的表达式,以传递给Where
函数,但我不知道该如何做到这一点。
Invoke
替代方法,但它被包含在连接代码中,可能难以理解。我可以发布一些更简单的内容。 - NetMagenow
传递给你的FilterAfterDate
函数,那么在这个简单的示例中,与原始代码相比并没有真正获得任何优势,只是将>
替换为,
。 - NetMage