在使用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}");