我有一个需要有条件地执行方法的方法,如下所示:
int MyMethod(Func<int> someFunction)
{
if (_someConditionIsTrue)
{
return someFunction;
}
return 0;
}
我希望能够将Linq查询作为someFunction传递给MyMethod:
int i = MyMethod(_respository.Where(u => u.Id == 1).Select(u => u.OtherId));
我该怎么做?
答案 0 :(得分:6)
int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId));
如您所见,我已将查询转换为lambda。您将不得不这样做,否则,您的查询将在调用MyMethod
之前执行(...并将引入编译时错误;))而不是在执行时执行。
附注:
此return someFunction;
应为return someFunction();
。
答案 1 :(得分:2)
也许这是一个错字,但在MyMethod中你需要实际调用函数:
return someFunction();
调用它时,你直接调用该函数。相反,你需要传递一个lambda表达式。而且,你似乎在传递Func<IEnumerable<int>>
;添加Single()
,SingleOrDefault()
,First()
或FirstOrDefault()
:
int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId).SingleOrDefault());