对于新条目,针对DomainContext的Silverlight 4查询

时间:2011-02-06 06:47:06

标签: silverlight-4.0 entities

我正在开发一个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。这只是一个导航页面。数据在导航框架中加载的页面中处理。

非常感谢任何帮助。

谢谢,

尼尔

1 个答案:

答案 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