假设我有一个LINQ查询,必须使用查询语法:
foreach (var productId in (from batchOrder in batchOrders
let outputFileName = GetUniqueFileName(batchOrder)
let ssisResult = SendToSsis(productId, outputFileName)
where ssisResult == 0))
{
// Does something here
}
Run Code Online (Sandbox Code Playgroud)
而且,我需要引入一个新的操作调用,而又不会超出查询范围。如果我正在调用的方法返回一个布尔值,则可以使用let关键字添加它:
foreach (var productId in (from batchOrder in batchOrders
let outputFileName = GetUniqueFileName(batchOrder)
let ssisResult = SendToSsis(productId, outputFileName)
// The next line is the new call
let trackingFiles = OutputTrackingFiles(batchOrder)
where ssisResult == 0))
{
// Does something here
}
Run Code Online (Sandbox Code Playgroud)
但是,如果该OutputTrackingFiles()方法无效,该怎么办?如何在查询中包含该调用,而无需进行修改?
简短的答案是:您不能。但是您可以将其包装在确实返回某些内容的委托中。
...
let trackingFiles = new Func<bool>(() => { OutputTrackingFiles(batchOrder); return true; })()
...
Run Code Online (Sandbox Code Playgroud)
如果您经常执行此操作,则辅助方法将使其更加简洁:
...
let trackingFiles = Execute(() => OutputTrackingFiles(batchOrder))
...
private static bool Execute(Action action)
{
action();
return true;
}
Run Code Online (Sandbox Code Playgroud)
要么:
...
let trackingFiles = Execute(OutputTrackingFiles, batchOrder)
...
private static bool Execute<T>(Action<T> action, T arg)
{
action(arg);
return true;
}
Run Code Online (Sandbox Code Playgroud)
但是,当然,这仅适用于一个参数-您必须为要支持的每个参数数量都有一个单独的方法。
| 归档时间: |
|
| 查看次数: |
753 次 |
| 最近记录: |