【问题标题】:Add returned LINQ result to label/textbox将返回的 LINQ 结果添加到标签/文本框
【发布时间】:2012-08-06 17:47:45
【问题描述】:

我想将 LINQ 2 SQL 查询的结果添加到标签或文本框中。 我使用“CustomerClass”类作为数据层。在这里,我有一个带有 LINQ 查询的方法。 这个结果需要返回到代码隐藏文件并添加到标签或文本框中。

类中的方法:

public static object SelectCustomerByUser(string user)
{
    var query = (from p in dc.Customers
                 where p.No_ == user
                 select p).Single();
    return query;
}

文件隐藏代码:

protected void Page_Load(object sender, EventArgs e)
{
    string user = Membership.GetUser().UserName.ToString().ToUpper();
    var queryresult = CustomerClass.SelectCustomerByUser(user);
    lblStreet.Text = ?????????

}

当我将 LINQ 查询直接设置到文件后面的代码中时,我可以直接分配 lblStreet.Text,例如:lblStreet.Text = queryresult.Street但我想将 LINQ 查询与文件后面的代码分开。

【问题讨论】:

    标签: asp.net linq-to-sql label return code-behind


    【解决方案1】:

    SelectCustomerByUser 方法返回 Customer 类型的 boxed 对象,因此您需要 unbox(类型转换)它并将属性/字段值分配给您的用户-界面。

    类似:

    var queryresult = CustomerClass.SelectCustomerByUser(user) as Customer;
    if(queryresult!=null)
      lblStreet.Text= queryresult.Street;  
    

    如果你改变SelectCustomerByUser的返回类型并使用FirstOrDefault而不是Single方法会更好。

    public static Customer SelectCustomerByUser(string user)
    {
        var query = (from p in dc.Customers
                     where p.No_ == user
                     select p).Single();
        return query;
    }
    

    【讨论】:

    • CustomerClass.SelectCustomerByUser(user) 已经在返回 Customer 对象,因此无需再次输入。
    • 看看 OP 中方法的返回类型 - public static object SelectCustomerByUser(string user)
    • 已经看过了,它的 public static Customer SelectCustomerByUser(string user) 不是 public static object SelectCustomerByUser(string user)。亲爱的,请检查您的解决方案:) 而且您还没有检查空值。
    【解决方案2】:

    所以,linq 似乎从 dc.Customers 返回了一个 CustomerClass 类型的对象。您可以创建一个函数(类似于string GetCustomerStreet(){...}),以填充标签:

    lblStreet.Text = ((CustomerClass)queryresult).GetCustomerStreet();
    

    【讨论】:

      【解决方案3】:

      我会让函数返回一个客户,而不是像这样的对象:

      public static Customer SelectCustomerByUser(string user)
      

      它是一个 Customer 类,函数名为 SelectCustomerByUser,它会返回一个客户,这将使您能够访问街道上的客户成员。

      在这种特殊情况下,您可以考虑使用SingleOrDefault

      【讨论】:

        【解决方案4】:

        假设

        var queryresult = CustomerClass.SelectCustomerByUser(user);
        

        返回 Customer 的一个实例,您可以将其转换为该实例,然后将属性连接到一个字符串中,或​​者使用 StringBuilder,无论什么,像这样:,

        Customer c = (Customer)queryresult);
        textbox.Text = String.Format("{0} email = {1}",customer.name , customer.email);
        

        顺便说一句,我会做的查询

        select p).SingleOrDefault();     
        

        然后在进行强制转换之前测试结果是否为 null

        【讨论】:

          【解决方案5】:
          public static CustomerClass SelectCustomerByUser(string user)
          {
              var query = (from p in dc.Customers
                           where p.No_ == user
                           select p);
              if(query.Any())
              {
                  var result=query.FirstOrDefault();
                  return new CustomerClass
                  {
                      Id = result.Id,
                      Name = result.Name,
                      Age = result.Age
                  }
              }
              return null;
          }
          

          后面的代码

          protected void Page_Load(object sender, EventArgs e)
          {
              string user = Membership.GetUser().UserName.ToString().ToUpper();
              var queryresult = CustomerClass.SelectCustomerByUser(user);
              lblStreet.Text = queryresult!=null?queryresult.Street:"";
          
          }
          

          public static CustomerClass SelectCustomerByUser(string user)
          {
              var query = (from p in dc.Customers
                           where p.No_ == user
                           select p);
              if(query.Any())
              {
                  return query.FirstOrDefault();      
              }
              return null;
          }
          

          代码背后

          protected void Page_Load(object sender, EventArgs e)
          {
              string user = Membership.GetUser().UserName.ToString().ToUpper();
              var queryresult = CustomerClass.SelectCustomerByUser(user);
              lblStreet.Text = queryresult!=null?queryresult.Street:"";
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-05-17
            • 1970-01-01
            • 1970-01-01
            • 2019-06-25
            • 1970-01-01
            • 2012-05-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多