是否可以将 C# 字符串内插与 Linq to SQL 一起使用

本文关键字:to Linq SQL 一起 字符串 是否 | 更新日期: 2023-09-27 18:32:52

在使用EF(

至少到版本6.1.3)时,假设您有一个这样的类:

 class Customer
 {
      public string FirstName { get; set; }
      public string LastName { get; set; }
 }

如果要获取一个字段FullName,该字段是(FirstNameLastName )作为查询结果中的字段的串联,则必须执行以下操作:

db.Customers.Select(c => new { FullName = c.FirstName + " " + c.LastName })

现在 C# 中有字符串插值,你能做这样的事情吗

db.Customers.Select(c => new { FullName = $"{c.FirstName} {c.LastName}" })

这似乎是一个微不足道的例子(确实如此),但问题仍然存在。

我可以开箱即用吗,我是否需要做一些技巧才能让它工作,或者确定它不起作用

是否可以将 C# 字符串内插与 Linq to SQL 一起使用

我不希望这样,不。它将编译为一个string.Format调用,我不希望得到支持。如果你真的需要在SQL部分完成投影,你可以测试它......但除此之外,像往常一样,当您完成需要在数据库中执行的查询部分时,请使用AsEnumerable(),然后使用Select

var query = db.Customers
              // Project to just the properties we need
              .Select(c => new { c.FirstName, c.LastName })
              // Perform the rest of the query in-process
              .AsEnumerable()
              .Select(c => $"{c.FirstName} {c.LastName}");

你能做这样的事情吗

不是一般意义上的,因为字符串插值只是转换为string.Format调用,用数字替换占位符并将值作为参数传递。 因此,您的格式将从

$"{c.FirstName} {c.LastName}" 

string.Format("{0} {1}", c.FirstName, c.LastName);

由于并非所有string.Format()功能(自定义格式字符串、填充、对齐等)都可以直接转换为 SQL,因此不受支持。

我是否需要做一些技巧才能让它工作,或者确定它不起作用?

我怀疑你可以做任何技巧来让它在 Ling-to-SQL 中工作,因为你正在内部处理string.Format您可以检索所需的所有部分,调用 AsEnumerable 将上下文从 Linq-to-SQL 更改为 Linq-to-Objects,然后在后续投影中使用插值,但在这种简单的情况下,使用字符串串联会更简洁。