【问题标题】:Concatenate two column values in LinQ Lambda Expression在 LinQ Lambda 表达式中连接两列值
【发布时间】:2012-04-19 09:21:43
【问题描述】:

我是 LinQ 的新手,那些 lambdas 对我来说似乎很棘手:(

我有一个有两列的表。名字和姓氏。我正在使用 LinQ 填充网格视图。

protected void Page_Load(object sender, EventArgs e)
    {
        myLinQtoSQLClassDataContext objDataContext = new myLinQtoSQLClassDataContext();

        var allUserList = from CurrentUser in objDataContext.Users.Where(c => c.Is_Deleted != false)                              
                          select new
                          {
                              CurrentUser.First_Name, 
                              CurrentUser.Last_Name,
                              CurrentUser.Email_ID,
                              CurrentUser.GUID
                          };

        GridView1.DataSource = allUserList;
        GridView1.DataBind();                              
    }

我可以使用 LinQ 检索值,但我想将名字和姓氏连接起来,中间有一个空格。

我试图实现的等效 SQL 查询是这样的:

Select First_name + ' ' + Last Name as Username, Email_ID, GUID
From tbl_Users where Is_Deleted != false

如何通过 lambda 表达式实现这一点?

【问题讨论】:

  • 在 SQL 中,您通常应该使用 ' ' 来表示包含空格的字符串。而不是 " "
  • aslo 看看:pranayamr.blogspot.ca/2010/12/… 可能会帮助您获得有关 linq 的更多信息
  • 检查我更新的答案可能会对您有所帮助.....

标签: c# sql linq lambda


【解决方案1】:

你可以使用字符串连接:

select new
{
    Username = CurrentUser.First_Name + " " + CurrentUser.Last_Name,
    CurrentUser.Email_ID,
    CurrentUser.GUID
};

【讨论】:

    【解决方案2】:

    试试

         select new
                {
                              FullName = CurrentUser.First_Name + " " + CurrentUser.Last_Name,
                              CurrentUser.Email_ID,
                              CurrentUser.GUID
                };
    

    【讨论】:

    • 谢谢大家,所有解决方案都可以正常工作。我希望我可以将它们全部标记为正确,但我只能标记一个:(
    【解决方案3】:
    var allUserList = from CurrentUser in objDataContext.Users.Where(c => c.Is_Deleted != false)                              
                      select new
                      {
                          Name = CurrentUser.First_Name + " " + CurrentUser.Last_Name, 
                          CurrentUser.Email_ID,
                          CurrentUser.GUID
                      };
    

    【讨论】:

      【解决方案4】:

      你应该给你的anonymous type'keys'(只读属性):

      select new
      {
        Name = CurrentUser.First_Name + " " + CurrentUser.Last_Name,
      };
      

      然后在分配用户名时连接字符串。

      【讨论】:

        【解决方案5】:

        看看这个CLR Method to Canonical Function Mapping
        .Net 提供了许多可以直接映射到查询的方法,您必须使用其中一种方法来添加两个字符串
        所以你可以使用的是

        select new 
        { 
            Username = Concat(first_Name,Last_Name), 
            CurrentUser.Email_ID, 
            CurrentUser.GUID 
        }; 
        

        【讨论】:

          【解决方案6】:

          这是另一个有效但尚未列出的变体:

          var allUserList =  objDataContext.Users.Where(c => c.Is_Deleted != false).
               Select(s => new{First_Name + " " + Last_Name, Email_ID, GUID});
          

          【讨论】:

          • var allUserList = objDataContext.Users.Where(c => c.Is_Deleted != false).Select(s => new{FullName = First_Name + " " + Last_Name, Email_ID, GUID}); 为我工作。我需要将 FullName 添加为字段
          【解决方案7】:
          select new
          {
              Username = string.Format("{0} {1}", CurrentUser.First_Name, CurrentUser.Last_Name),
              CurrentUser.Email_ID,
              CurrentUser.GUID
          };
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多