【问题标题】:Select query on type to transform it into its sub type using Linq选择查询类型以使用 Linq 将其转换为子类型
【发布时间】:2018-07-07 20:38:47
【问题描述】:

我正在做一个 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()

这里的问题是我得到了一个匿名类型的数组,我需要手动映射到我的视图模型类 ab。在这种情况下,我必须有一个循环来手动将每个结果集转换为 ViewModel。

看Select函数的签名

Enumerable.Select TSource, TResult

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

【问题讨论】:

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


    【解决方案1】:

    这里的问题是我得到一个匿名类型的数组,我 需要手动映射到我的视图模型类 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      相关资源
      最近更新 更多