MonoTouch & LINQ - операция недопустима из-за текущего состояния объекта - PullRequest
4 голосов
/ 19 января 2012

У меня есть приложение, которое использует Monotouch / C # на Mac в качестве внешнего интерфейса, получая данные из службы WCF в VS2010 на внутреннем интерфейсе.Вчера вечером все работало как сон, прежде чем я ушел, а сегодня я не уверен, что происходит.Все, что я могу видеть, это то, что это исключение, исходящее из Linq Monotouch, и похоже, что я все делаю хорошо, так как я не касался этого куска кода в последние несколько дней.

После того, как яполучить объект GetAllStaffResult обратно из WCF, я возвращаюсь в основной поток и затем вызываю этот метод 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, чтобы увидеть эти строки.

О, this - это GetAllStaffResult, вышеописанный метод - это частичный класс, который имеет массив сотрудников, франшиз., места.Метод заполнения заполняет каждого сотрудника и заполняет имя франшизы на основе идентификатора франшизы сотрудника.Я делаю это, потому что возвращаюсь, как 500 сотрудников с длинными именами франшизы, и я экономлю полосу пропускания, восстанавливая граф объектов на клиентской стороне.

Поскольку в внешнем ключе есть связьбазы данных, я на 100% уверен, что Single всегда будет возвращать результат.Метод First () также вызвал у меня ту же проблему.

РЕДАКТИРОВАТЬ: трассировка стека для метода First (), который я пробовал после метода Single ().Сейчас я проверяю исходный код, сообщу о своих выводах.

1 Ответ

8 голосов
/ 19 января 2012

Это произойдет, если последовательность пуста.

...