我编写了一个LINQ查询,对于Select子句,我创建了一个Expression来重用它。
我的查询看起来像这样
DataContext.Single.Select(SearchSelector).ToList();
搜索选择器定义为
的位置 private Expression<Func<Singles, SearchSingles>> SearchSelector = s =>
new SearchSingles
{
};
以上工作正常,但如果我想使用两个输入参数怎么办?我该如何调用它?
private Expression<Func<Singles,string, SearchSingles>> SearchSelector = (s,y) =>
new SearchSingles
{
};
答案 0 :(得分:3)
不是有一个存储表达式的字段,而是有一个方法可以创建给定特定字符串所需的表达式:
private static Expression<Func<Singles, SearchSingles>> CreateSearchSelector(
string foo)
{
return s =>
new SearchSingles
{
Foo = foo,
};
}
然后您可以像这样使用此方法:
DataContext.Single.Select(CreateSearchSelector("Foo")).ToList();
答案 1 :(得分:0)
如何单独留下签名并将其他参数作为捕获值传递?它可能作为初始化成员变量使用有限,就像这样,但如果你从一些工作者函数中分配,而不是在课程构建期间初始化它,你将拥有更多的权力。
private Func<Singles, SearchSingles> SearchSelector = s =>
new SearchSingles
{
someVal = capturedVariable,
someOther = s.nonCapturedVar
};
如果capturedVariable
是静态成员
或
private Func<Singles, SearchSingles> SearchSelector = null;
private void WorkerFunction(string capturedVariable, bool capAgain, bool yetAgain)
{
SearchSelector = s => {
bool sample = capAgain;
if (capturedTestVar)
sample = yetAgain;
return new SearchSingles
{
someVal = capturedVariable,
someOther = s.nonCapturedVar,
availability = sample
};
};
};
你可以有各种各样的乐趣
*编辑 *删除了对表达式的引用和说明