Запрос Silverlight 4 против DomainContext для новой записи
Я работаю над приложением 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. Я должен получить результат.
Я пробовал несколько разных способов, и я не могу получить это.
Мне просто нужно взять поле идентификатора из таблицы, которая называется store, где столбец StoreManager равен текущему вошедшему в систему пользователю, и назначить его полю store и xferfrom в таблице с именем формы, когда я создаю форму.
Я думаю, что сделать это сложнее, чем хотелось бы, это то, что у меня нет DataContext, определенного в xaml на странице. Это просто навигационная страница. Данные обрабатываются на страницах, которые загружаются во фрейм навигации.
Любая помощь будет принята с благодарностью.
Спасибо,
Нил
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 пунктов.
НТН