是否可以将 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
,该字段是(FirstName
和 LastName
)作为查询结果中的字段的串联,则必须执行以下操作:
db.Customers.Select(c => new { FullName = c.FirstName + " " + c.LastName })
现在 C# 中有字符串插值,你能做这样的事情吗
db.Customers.Select(c => new { FullName = $"{c.FirstName} {c.LastName}" })
这似乎是一个微不足道的例子(确实如此),但问题仍然存在。
我可以开箱即用吗,我是否需要做一些技巧才能让它工作,或者确定它不起作用?
我不希望这样,不。它将编译为一个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,然后在后续投影中使用插值,但在这种简单的情况下,使用字符串串联会更简洁。