在linq '选择新对象{中连接字符串

本文关键字:对象 字符串 连接 linq 新对象 选择 | 更新日期: 2023-09-27 18:17:22

我需要在LINQ select语句中将两列连接在一起,像这样:

var result = (from i in db.MyTable
                blah blah ...
                select new MyObject
                {
                    Id = i.MyTableId,
                    ReportedByName = ub.FirstName + ' ' + ub.LastName
                }).First();

正如我所想的,ub.FirstName + ' ' + ub.LastName抛出了一个错误。我该如何使用这个语法呢?

谢谢!

在linq '选择新对象{中连接字符串

您当前正在连接一个具有char值的字符串,而您想要的是连接字符串。字符串+运算符期望另一个string而不是char。使用" "代替:

ReportedByName = ub.FirstName + " " + ub.LastName

当然还有其他方法:

  1. string.Format或c# 6.0的语法糖插值

    ReportedByName = string.Format("{0} {1}", ub.FirstName, ub.LastName)
    ReportedByName = $"{ub.FirstName} {ub.LastName}" //syntactic sugar of option above
    
  2. string.join(如果你有更多的值,我会选择这个)

    ReportedByName = string.Join(" ", ub.FirstName, ub.LastName)
    
  3. string.Concat

    ReportedByName = string.Concat(ub.FirstName, " ", ub.LastName)
    

因为你是在一个linq实体,而不是对象在内存string.Join(因此也字符串插值)和string.Format可能不工作,如果你是在一个linq被翻译成sql查询。如果您想使用这些选项,首先将项检索到内存(使用ToList()/AsEnumerable()),然后使用它们连接字符串。请看Jon的回答

如果你使用c# 6,你可以这样做:

= $"{ub.FirstName} {ub.LastName}"

我认为字符串插值是最容易阅读的