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

时间:2016-11-11 13:27:25

标签: c# asp.net linq

我需要在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会抛出错误。我将如何使用此语法?

谢谢!

2 个答案:

答案 0 :(得分:3)

您当前正在连接具有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)
    
  4. 因为你在 linq到实体而不是内存中的对象string.Join(因此也是字符串插值)和string.Format可能不起作用,如果你在linq被翻译成sql查询。如果你想使用这些选项,首先将项目检索到内存(使用ToList() / AsEnumerable(),然后使用它们来连接字符串。请参阅Jon的answer

答案 1 :(得分:2)

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

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

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