Запрос Silverlight 4 к DomainContext для новой записи

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

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

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 равен текущему вошедшему в систему пользователю, и присвоить его полю хранилища и xferfrom в таблице с именем формы при создании формы.

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

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

Спасибо,

Нил


person Neil Denton    schedule 06.02.2011    source источник
comment
Можете ли вы показать определения классов или модель Entity Framework (или любую другую) со стороны сервера? Или, точнее, каковы типы form.Store и form.xferfrom?   -  person Austin Lamb    schedule 06.02.2011
comment
И form.Store, и form.xferfrom должны быть int. Идентификатор в таблице моих магазинов представляет собой значение типа int, не заполняемое автоматически, и представляет собой код хранилища для моих магазинов. My FormsDS — это мой DomainDataSource, и он основан на структуре сущностей. Спасибо!   -  person Neil Denton    schedule 08.02.2011


Ответы (1)


Проблема в том, что приведенный выше запрос 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 элементов.

ХТН

person Shimmy Weitzhandler    schedule 18.01.2012