C# 无功扩展-停止流量,直到变量充满
我有以下代码。我的方法有一个字符串返回类型C# 无功扩展-停止流量,直到变量充满,c#,silverlight,asynchronous,system.reactive,C#,Silverlight,Asynchronous,System.reactive,我有以下代码。我的方法有一个字符串返回类型 public string GetRedemeptionNumber() { string _batchNumber = "test"; var _loadBatchName = Observable.ForkJoin(_context.QuerySingleOrDefault( _context.GetRedemptionsQuery().Where(x => x.ReceiveBatchName.StartsWith
public string GetRedemeptionNumber()
{
string _batchNumber = "test";
var _loadBatchName = Observable.ForkJoin(_context.QuerySingleOrDefault(
_context.GetRedemptionsQuery().Where(x => x.ReceiveBatchName.StartsWith(_batchNumber))
.OrderByDescending(x => x.ReceiveBatchName)
.Take(1)))
.Do(u => _redemptionBatch = u.FirstOrDefault())
.Select(x => new Unit())
.Finally(() =>
{
_batchNumber = _redemptionBatch.Name;
//this doesnt work since a return isnt allowed
return _batchNumber;
}
});
_loadBatchName.Subscribe();
return _batchNumber;
}
我的问题是,在设置之前,它会运行并返回我的_batchNumber。因此它返回一个空的批处理数。有没有办法阻止它运行到返回(my.finally之外)并等待从my.finally内部填充_batchNumber
我的代码现在显然不起作用,因为我的。最终不允许返回 您的代码确实存在一些问题 首先,如果你想阻塞直到Rx返回,那么使用Rx没有多大意义。它应该是关于不阻塞。因此,您应该真正返回
IObservable
,而不是string
另外,要使查询具有降序的OrderByDescending,您需要使用可枚举的而不是可观察的,因此您的查询必须以某种方式转变为可观察的
在这个查询中,ForkJoin
似乎对您没有任何帮助。你为什么用它
所有的操作
和最后
操作符也没有多大意义
在任何情况下,我都无法将您的代码重构为可编译的代码,但我已经很接近了。从这个开始,告诉我需要改变什么
public static IObservable<string> GetRedemeptionNumber()
{
var _batchNumber = "test";
var q =
_context.GetRedemptionsQuery()
.Where(x => x.ReceiveBatchName.StartsWith(_batchNumber))
.OrderByDescending(x => x.ReceiveBatchName)
.Take(1);
return (from u in _context.QuerySingleOrDefault(q)
from z in u
select z.Name).Take(1);
}
publicstaticiobservable getredemptionnumber()
{
var\u batchNumber=“测试”;
变量q=
_context.GetRedemptionsQuery()
.Where(x=>x.ReceiveBatchName.StartsWith(_batchNumber))
.OrderByDescending(x=>x.ReceiveBatchName)
.采取(1)项措施;
返回(来自_context.QuerySingleOrDefault(q)中的u)
从z到u
选择z.Name)。取(1);
}
您能描述一下您在这里真正想要做什么吗?也许您不想使用Finally,而是希望使用Aggregate?在方法的早期设置了_batchNumber。在我在Finally中设置它之前,此代码一直运行到返回_batchNumber。我想要的是在方法底部返回_batchNumber之前停止执行。我不确定聚合会做什么。我的意思是,描述一下这段代码的目标-场景是什么?我基本上是从各种变量(用户名、日期和一些其他硬编码项)创建一个batchNumber。我的batchnumber看起来像这个RCV-evjen-072711,在我有了这个batchnumber之后,我要做的是在数据库中查询这个数字,然后使用startsWith,在我的数据库中,这个batchnumber以-1或-2等结尾。然后我会增加最后一个数字。所以我可以得到一批RCV-gevjen-072711-2。这将是我需要返回的最后批次号。希望有意义。记录\u context.QuerySingleOrDefault
和\u context.GetRedemptionsQuery的返回类型对您很有用