我正在研究ASP.Net核心项目,并且我的模型如下:
Class abcde
{
int a {get;set;}
int b {get;set;}
int c {get;set;}
int d {get;set;}
int d {get;set;}
}
在特定视图中,我只需要上述定义的模型的属性a和b。因此,我只定义了一个ViewModel类(放入另一个名称空间),如下所示:
Class ab
{
int a {get;set;}
int b {get;set;}
}
现在在控制器中,我正在进行选择查询,我打算仅选择a和b属性。因为这些是我要在视图中显示的唯一属性。因此,基本上我的查询必须是:
var objects = _context.abcde.Select( x=> new {x.a, x.b}).ToArray()
这里的问题是我得到了一个匿名类型的数组,我需要手动将其映射到我的viewmodel类ab。在这种情况下,我必须要有一个循环才能将每个结果集手动转换为ViewModel。
查看Select函数的签名
可枚举。选择TSource,TResult
函数本身可以执行转换,但我找不到任何示例。我在这里可能有一个错误的想法。您能否建议处理这种情况的方法。我相信这将是非常普遍的情况。预先感谢。
答案 0 :(得分:2)
这里的问题是我得到了一个匿名类型的数组,我 需要手动映射到我的viewmodel类ab。在这种情况下,我会 必须有一个循环才能将每个结果集手动转换为 ViewModel。
因此,仅使用ab
类进行项目设计,如下所示:
x => new ab() { a = x.a, b = x.b }
代替使用匿名类型:
x => new { x.a, x.b }
因此您的最终查询将如下所示:
var objects = _context.abcde.Select(x => new ab { a = x.a, b = x.b }).ToArray()