选择类型查询以使用Linq将其转换为其子类型

时间:2018-07-07 20:38:47

标签: c# entity-framework linq asp.net-core entity-framework-core

我正在研究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

函数本身可以执行转换,但我找不到任何示例。我在这里可能有一个错误的想法。您能否建议处理这种情况的方法。我相信这将是非常普遍的情况。预先感谢。

1 个答案:

答案 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()