【问题标题】:LINQ: How To Bind to a list of Concatenated Strings?LINQ:如何绑定到串联字符串列表?
【发布时间】:2012-02-07 11:38:33
【问题描述】:

我在一个方法中有这个 LINQ 查询:

public List<String> GetListNameUsers() 
{
    using (var context = new UCDataContext()) 
    {
        return (from c in context.Users
                select (c.LastName + " " + c.FirstName) ).ToList();
    }
}

但这不起作用。 我想返回一个由 FirstName + " " + LastName 组成的字符串。

我将这个方法的结果绑定到一个DropDownList,如下:

<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="UsersODS"
     DataTextField="LastName" DataValueField="IDUser" />

当我的DropDownList 被数据绑定时,LastName 字段无法识别。

我该如何解决这个问题?

提前致谢。

路易吉

【问题讨论】:

  • “这不起作用”具体是什么意思?究竟是什么问题?这是 LINQ to SQL 还是什么?
  • -1 因为从您的一个 cmets 来看,问题实际上在于将此查询绑定到下拉列表
  • 因为给我这个错误(在运行时):DataBinding:“System.String”不包含名为“LastName”的属性。描述:未处理的异常 我认为,问题在于我的 DropDownList 具有以下属性:DataTextField="LastName" Luigi

标签: c# asp.net linq data-binding


【解决方案1】:
public IList GetListNameUsers() 
{
    using (var context = new UCDataContext()) 
    {
        return (from c in context.Users
                select new { 
                     Name = c.LastName + " " + c.FirstName,
                     IDUser = c.IDUser
                   }
               ).ToList();
    }
}

<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="UsersODS"
     DataTextField="Name" DataValueField="IDUser" />

【讨论】:

  • 这似乎是最合适的答案,有人可以这样标记吗?这里的关键是他选择了一个复杂的对象(而不仅仅是一系列串联的字符串值),该对象还包含一个可用于数据绑定目的的相关 ID。
【解决方案2】:

首先获取记录(使用 ToList),然后在客户端进行字符串连接

public List<String> GetListNameUsers()
{

 using (var context = new UCDataContext())
 {
     return context.Users
                   .Select(c=>new {c.LastName, c.FirstName})
                   .ToList()
                   .Select(c=>c.LastName + " " + c.FirstName)
                   .ToList();
 }

}

【讨论】:

    【解决方案3】:

    问题在于您的上下文提供程序是一个数据库,这意味着必须将 LINQ 表达式转换为 SQL 查询。 SQL 查询生成器可能不支持将字符串连接转换为正确的 SQL。相反,您可以将用户转换为普通的旧列表,然后在该列表上执行选择。

    类似:

    public List<String> GetListNameUsers()
    {
    
     using (var context = new UCDataContext())
     {
         var users = (from c in context.Users.ToList()
                 select (c.LastName + " " + c.FirstName) ).ToList();
     }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-06
      • 1970-01-01
      • 2011-06-16
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多