【问题标题】:Concatenating two strings to one in LINQ query [closed]在LINQ查询中将两个字符串连接到一个[关闭]
【发布时间】:2017-03-24 19:22:13
【问题描述】:

通过在 LINQ 选择操作中连接两个字符串来检索一个字符串的正确方法是什么。

var displayName = _db.Users.Where(e => e.Id == appId)
                           .Select(d => new { d.Firstname, d.Lastname })

我知道有一种方法可以返回这两个属性的串联,但我没有想出正确的语法。

【问题讨论】:

  • 您希望名字和姓氏在一个变量中?
  • 嗯,d.FirstName + " " + d.LastName?目前还不清楚您要的是什么...
  • @Jon Skeet...我用 .Select(d => new {d.Firstname + " " + d.Lastname}) 尝试过,显示为错误
  • @dinotom 你为什么要new?你不想要一个匿名类型,你想要一个字符串。 .Select(d => d.Firstname + " " + d.Lastname)
  • @dinotom 但是,如果您确实希望将其作为匿名类的属性,则必须将其命名为 new { FullName = d.Firstname + " " + d.Lastname}

标签: c# linq entity-framework-6


【解决方案1】:

使用 C# 6 字符串插值,变为:

var displayName = _db.Users.Where(e => e.Id == appId)
                           .Select(d => $"{d.Firstname} {d.Lastname}");

请注意:.Where 将返回一个枚举!您可以考虑使用.FirstOrDefault 或只是.First 而不是.Where

【讨论】:

  • EF 存储是否支持插值?
  • @Igor 不知道_db.Users 是什么,所以这就是我开始做的方式。
  • OP中的代码只是伪代码。我会使用 FirstorDefault。
  • @crashmstr 我认为_db 强烈建议使用 EF 或其他一些 Linq-To-SQL 提供程序。
  • @Igor 不,因为字符串插值只是编译成string.Format
【解决方案2】:

只需使用+ ?

.Select(d => d.Firstname + " " + d.Lastname)

【讨论】:

  • String.Concat 用于字符串,总是...
  • 有一段时间没有使用实体框架,但不确定是否支持string.concat
  • @SelmanGenç 你没有错过任何东西 - 它确实不受支持。我的意思是,string.Concat+ 没问题。
  • @Igor 实际上支持 1,2 或 3 个 string 参数的 3 个重载。你可以在这里看到它CLR Method to Canonical Function Mapping
  • @ArnaudF.:嗯,为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
相关资源
最近更新 更多