MonoTouch& LINQ - 由于对象的当前状态,操作无效

时间:2012-01-19 17:01:28

标签: c# wcf linq exception xamarin.ios

我有一个应用程序在Mac上使用Monotouch / C#作为前端,从后端的VS2010中的WCF服务中提取数据。在我离开之前,昨晚的一切都像梦一样,今天,我不确定发生了什么。我所能看到的只是来自Monotouch的linq中的一个例外,看起来我做的一切都很好,因为我在过去几天没有触及这段代码。

从WCF获取GetAllStaffResult对象后,我回到主线程然后调用此方法Populate()

public void Populate()
{
    foreach (var m in Staff)
    {
        m.FranchiseName = this.Franchises.Single(f => f.ID == m.FranchiseID).Name;
    }
    [snip]
}

这是堆栈跟踪:

System.InvalidOperationException: Operation is not valid due to the current state of the object.
at System.Linq.Enumerable.First[FranchiseListingItem] (IEnumerable'1 source, System.Func2 predicate, Fallback fallback) [0x0004a] in /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System.Linq/Enumerable.cs:816
at System.Linq.Enumerbale.First [FranchiseListingItem] (IEnumerable'1 source, System.Func2 predicate) [0x00007] in /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System.Linq/Enumerable.cs:843
at ADMobileServices.BOTransferDTOs.GetAllStaffResult.Populate() [0x0003b] (my code)

不确定是什么导致这个......任何人都有任何想法?去看看我是否能找到MT源文件,这样我才能看到这些行。

哦,thisGetAllStaffResult,上面的方法是一个部分类,其中包含一系列工作人员,特许经营权,地点。 populate方法接受每个工作人员并根据工作人员的特许经营权ID填写特许经营权的名称。我这样做是因为我要回来的时候有500名工作人员,他们有很长的特许经营名称,我通过在客户端重建对象图来节省带宽。

因为数据库中存在外键关系,所以我100%确定Single将始终返回结果。 First()也给了我同样的问题。

编辑:堆栈跟踪用于我在Single()方法之后尝试的First()方法。我现在正在检查源代码,将报告我的发现。

1 个答案:

答案 0 :(得分:8)

如果序列为空,则会发生这种情况。

相关问题