Запрос Silverlight 4 против DomainContext для новой записи - PullRequest
0 голосов
/ 06 февраля 2011

Я работаю над приложением silverlight, которое позволяет пользователям заполнять общие формы.

На моем mainpage.xaml у меня есть 4 кнопки, которые позволяют пользователю создавать новую форму. У меня есть следующий код в обработчике события click

FormsDS t = new FormsDS();
        Store s = new Store();
        var i = (from j in t.Stores
                 where j.StoreManager.Contains(WebContext.Current.User.Name)
                 select j.ID);


        form newxferform = new form
        {
            xfertype = 1,
            createdate = DateTime.Now,
            createdby = WebContext.Current.User.Name,
            assignedto = WebContext.Current.User.Name,
            Store = Int32.Parse(i.ToString()),
            xferfrom = Int32.Parse(i.ToString()),
            appovalstatus = 1,
            ronum = "0",
            hide = 0
        };

        t.forms.Add(newxferform);
        t.SubmitChanges(createop =>
            {
                Uri target = new Uri("/views/TransferForm.xaml?FormID=" + newxferform.id, UriKind.Relative);
                ContentFrame.Navigate(target);
            }, null);            

FormsDS - мой текстовый текст. Я хотел бы взять значение i из запроса вверху и присвоить его значениям Store и xferfrom в newxferform. Однако, когда я запускаю его, я получаю «Входная строка была не в правильном формате». Если я не выполняю Int32.Parse, я получаю сообщение «Не удается неявно преобразовать тип» System.Collections.Generic.IEnumerable 'в'? Int '. Я совсем не понимаю, так как все столбцы в БД не являются нулевыми. Я пытался написать try catch для обработки нулевых значений, но не могу понять, почему значение возвращается как нулевое, имя пользователя точно соответствует столбцу storemanager. Я должен получить результат.

Я пробовал несколько разных способов, и я не могу его получить.

Мне просто нужно взять поле идентификатора из таблицы, называемой магазинами, где столбец StoreManager равен текущему зарегистрированному пользователю, и назначить его полю store и xferfrom в таблице, называемой формами, при создании формы.

То, что я думаю, делает это сложнее, чем хотелось бы, это то, что у меня нет DataContext, определенного где-либо в xaml на странице. Это просто навигационная страница. Данные обрабатываются на страницах, которые загружаются во фрейм навигации.

Любая помощь будет принята с благодарностью.

Спасибо

Neil

1 Ответ

0 голосов
/ 18 января 2012

Проблема в том, что приведенный выше запрос LINQ выдает IEnumerable<int>, а не один int.

Чтобы решить эту проблему, замените объявление i следующим:

var i =
  t.Stores
    .FirstOrDefault(j => j.StoreManager.Contains(WebContext.Current.User.Name))
    .ID;

Или, если вам нравится способ LINQ:

var i = (from j in t.Stores
           where j.StoreManager.Contains(WebContext.Current.User.Name)
           select j.ID)
        .FirstOrDefault();

(Вы должны заменить FirstOrDefault на Single, если ожидается точно 1 элемент или на SingleOrDefault, если ожидается 0 или 1 элементов .

НТН

...