我正在开发一个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是我的datacontext。 我想从顶部的查询中获取值i,并将其分配给newxferform中的Store和xferfrom值。但是,当我运行它时,我得到'输入字符串格式不正确'。如果我不做Int32.Parse我得到消息'不能隐式转换类型'System.Collections.Generic.IEnumerable'到'?int'。我根本不理解这一点,因为db中的所有列都不为null。我已经尝试编写try catch来处理null值,但我无法弄清楚为什么值返回null,用户名完全匹配storemanager列。我应该得到一个结果。
我尝试了几种不同的方式,但我似乎无法得到它。
我只需要从名为stores的表中获取ID字段,其中colum StoreManager等于当前登录的用户,并在创建表单时将其分配给名为forms的表中的store和xferfrom字段。
我认为让这比我想要的更难的是我没有在页面上的xaml中定义任何DataContext。这只是一个导航页面。数据在导航框架中加载的页面中处理。
非常感谢任何帮助。
谢谢,
尼尔
答案 0 :(得分:0)
问题是上面的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();
(如果预计 1 项目,则应将FirstOrDefault
替换为Single
;如果 0 或SingleOrDefault替换为{{1}} > 1 项目。
HTH