如何使用 EF 将 Lambda 表达式作为方法参数传递
本文关键字:方法 参数传递 表达式 Lambda 何使用 EF | 更新日期: 2023-09-27 18:30:17
如何将 EF 表达式作为方法参数传递?
为了说明我的问题,我创建了一个伪代码示例:
第一个例子是我今天的方法。该示例使用 EF 和花式重试逻辑。我需要做的是封装花式重试逻辑,使其变得更加通用并且不重复。
在第二个示例中,是我希望它的样子,使用一个接受 EF 表达式作为参数的帮助程序方法。
对于 SQL,这将是一件微不足道的事情,但我想使用 EF 执行此操作,以便我可以从强类型对象中受益。
第一个例子:
public static User GetUser(String userEmail)
{
using (MyEntities dataModel = new MyEntities ())
{
var query = FancyRetryLogic(() =>
{
(dataModel.Users.FirstOrDefault<User>(x => x.UserEmail == userEmail)));
});
return query;
}
}
第二个例子:
T RetryHelper<T>(Expression<Func<T, TValue>> expression)
{
using (MyEntities dataModel = new (MyEntities ())
{
var query = FancyRetryLogic(() =>
{
return dataModel.expression
});
}
}
public User GetUser(String userEmail)
{
return RetryHelper<User>(<User>.FirstOrDefault<User>(x => x.UserEmail == userEmail))
}
也许是这样的?
public TValue RetryHelper<T, TValue>(Func<ObjectSet<T>, TValue> func)
where T : class
{
using (MyEntities dataModel = new MyEntities())
{
var entitySet = dataModel.CreateObjectSet<T>();
return FancyRetryLogic(() =>
{
return func(entitySet);
});
}
}
public User GetUser(String userEmail)
{
return RetryHelper<User, User>(u => u.FirstOrDefault(x => x.UserEmail == userEmail));
}
只是为了发布我们已经讨论过的内容......
这是一个可能对您有所帮助的链接,我认为它与您需要的类似。
将 AsQueryable 与 Linq To Objects 和 Linq to SQL 结合使用
如何缓存 IQueryable 对象?
我见过更好的示例,但我手边没有它们,基本上正如我提到的,您可以使用它来将查询保留在表单中,以便您可以进一步过滤、更改,直到您知道一切都已完成并且可以实际实现和枚举查询的最后一刻。
希望对您有所帮助