2011-02-06 21 views
0

我正在研究Silverlight应用程序,该应用程序允许用户填写常用表单。针对DomainContext的Silverlight 4查询新条目

在我的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是我的datacontext。 我想从顶部的查询中获取值i,并将其分配给newxferform中的Store和xferfrom值。但是,当我运行它时,我得到'输入字符串不是在一个正确的格式'。如果我不做Int32.Parse,我得到消息'不能隐式转换类型'System.Collections.Generic.IEnumerable'到'?int'。我不明白这一点,因为db中的所有列都不为空。我试过编写try catch来处理空值,但我无法弄清楚为什么这个值会返回为null,用户名和storemanager列完全匹配。我应该得到一个结果。

我试过了几种不同的方法,我似乎无法得到它。

我只需要从名为stores的表中获取ID字段,其中column StoreManager等于当前登录的用户,并在创建表单时将其分配给名为表单的表中的store和xferfrom字段。

我认为比我想要的更难的是,我没有在页面上的xaml中定义anyhere的DataContext。这只是一个导航页面。数据在载入导航框架的页面中处理。

任何帮助将不胜感激。

谢谢,

尼尔

+0

你能告诉类定义,或实体框架(或其他)模型由服务器端? 或者更快一点,form.Store和form.xferfrom的类型是什么? – 2011-02-06 08:51:41

回答

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(); 

(你应该Single如果恰好项目替换FirstOrDefault预计或与SingleOrDefault如果或我预计电话。

HTH