【发布时间】:2012-04-07 23:01:06
【问题描述】:
如何将 EF 表达式作为方法参数传递?
为了说明我的问题,我创建了一个伪代码示例:
第一个例子是我今天的方法。该示例使用 EF 和 Fancy Retry Logic。 我需要做的是封装 Fancy Retry Logic 使其变得更通用且不重复。
在第二个示例中,我希望它是这样的,它带有一个接受 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))
}
【问题讨论】:
-
你能不能重新格式化一下,很难理解 - 其他人会阅读/帮助更多
-
SO 编辑器太难用了,但也许你有一个具体的问题我可以回答?
-
您是否尝试将您的查询投射到
.AsQueryable()?这样你就可以“移动”它,稍后过滤等等 - 我认为这就是你在这里所追求的。 -
对于编辑器 - 就在 VS 中复制之前,取“整行”(复制行不是文本),它需要大致“一个标签”,通常效果很好。
-
我会试试 .AsQueryable() 谢谢!
标签: c# .net entity-framework lambda linq-expressions