lon*_*nix 6 c# entity-framework-core .net-7.0 ef-core-7.0
我正在使用 EF Core 7。我想执行服务器评估并项目到命名元组。
我试过:
var products = await _context.Products.Select(x => (x.Id, x.Name)).ToListAsync();
Run Code Online (Sandbox Code Playgroud)
这使:
表达式树可能不包含元组文字。
我可以使用常规元组 ( Tuple.Create()) 或匿名对象 ( new {}) 来完成此操作,但如果可能的话,我想使用命名元组。
这可以以某种方式完成吗?
不,目前这是不可能的,因为不可能在表达式树中使用值元组文字。您可以在 github 上监控以下问题/讨论:
如果您真的非常想使用值元组,唯一的方法是在查询具体化后映射到它们,但我认为在大多数情况下这是毫无意义的。像下面这样:
var products = _context.Products
.Select(x => new {x.Id, x.Name})
.AsEnumerable()
.Select(ac => (ac.Id, ac.Name))
.ToList();
Run Code Online (Sandbox Code Playgroud)
虽然方法间接有一个可以使用的技巧:
class SomeClass // local functions can't be used
{
public static (int Id, int Name) CreateNamedValueTuple(int t1, int t2) => (t1, t2);
}
var products = await _context.Products
.Select(x => SomeClass.CreateNamedValueTuple(x.Id, x.Name))
.ToListAsync();
Run Code Online (Sandbox Code Playgroud)
但就我个人而言,我只会使用 C# 9记录功能,该功能允许轻松创建类型(或 C# 10记录结构)。
| 归档时间: |
|
| 查看次数: |
841 次 |
| 最近记录: |