c# - 对基于 LINQ 的列表使用匿名类型而不是 var
问题描述
我有返回匿名类型的 LINQ 请求,例如:
var result = context.Table1.Select(
x => new
{
col1 = x.col1,
col2 = x.col2
}).ToList();
这很好,直到我想将结果交给另一个函数。
比我需要准确指定的,列表的类型是什么。我不能再使用var
了。
但是如果我使用
List< (string col1, string col2)> result ...
我收到 “无法隐式转换类型...”错误。
是的,我可以为每个实体创建一个新类。但这是处理它的唯一方法吗?
解决方案
如果你想使用元组类型(这就是你(string col1, string col2)
的)而不是匿名类型(这就是你new { col1=x.col1...}
的),你需要另一种语法:
List<(string col1, string col2)> list = context.Table1
.Select( // linq to entities
x => new
{
col1 = x.col1,
col2 = x.col2
})
.ToArray() // go on with linq to objects for use of tuple types
.Select(x => (col1: x.col1, col2: x.col2))
.ToList();
表达式树不支持 ValueTuples,因此您可能需要在查询中使用匿名类型和元组类型的组合
请参阅元组类型, 在匿名和元组类型之间进行选择
推荐阅读
- r - pnorm(q = (x - $\mu$)/$\sigma$) 是否与 pnorm(q = x, mean = $\mu$, sd = $\sigma$) 不同?
- python - 查找 N x M 数组的帕累托角的坐标
- python - 为什么 PyGame 中根本没有绘制任何内容?
- python - 试图从 JSON 中获取键值作为表中的列
- powershell - 当天第一次执行时出现 Powershell Runspace 错误
- linq - 子项的 Cosmos Db linq 查询不起作用
- excel - Excel Vlookup Date - 创建具有多个值的列表
- regex - 正则表达式匹配 2 个或更多特殊字符 - PowerShell 脚本
- java - 如何在对象列表上进行交互返回合并数据
- amazon-web-services - CloudFormation:对 SecretManager 值的动态引用不适用于资源的标记属性