可查询选择中的内联函数调用

本文关键字:函数调用 查询 选择 | 更新日期: 2023-09-27 18:36:55

我需要一些帮助来处理 IQueryable 的数据项集合,然后将它们选择为新形式。

调用以下方法从存储库获取一些数据:

var data = this.repository.GetAllPersonalDetails();

然后,我想将集合中的每个项目转换为业务对象,我使用以下方法执行此操作:

var businessTypes = data.Select(dataType => new PersonalDetails
    {
        FirstName = dataType.FirstName
        ...etc.
    });

这工作正常,一切都很好,但是业务对象很大,我想使用将数据对象映射到业务对象的适配器函数。但是,如果我使用类似于以下内容的代码:

var businessTypes = data.Select(dataType => this.ConvertToBusinessObject(dataType));

然后整个可查询管道变得混乱,当查询最终执行时我会收到异常。

有谁知道我想做的事情是否可能?如果我们使用适配器函数在多个位置的对象之间进行转换,那就太好了,我宁愿重用它们,而不必进行内联的完全转换。

可查询选择中的内联函数调用

问题是,必须定义从存储库对象到某处业务对象的映射。如果没有此功能或使用 LINQ 选择,则无法使其正常工作。

有许多不同的ORM(对象关系映射器)将数据库对象映射到业务对象,但即使它们也必须生成一些适配器。对于 instace,实体框架使用模板生成映射类,并将它们隐藏在上下文类型下,这样您就不会为此烦恼。

如果不想或不能使用任何现有映射器,可以编写自己的适配器。当您谈论适配器时,我假设您已经知道如何完成它们。

回答我自己的问题,这个问题的答案中给出的指导对我来说非常有效。

将 IQueryable 对象转换为另一个对象?

AutoMapper 就是您正在寻找的。

AutoMapper是一个简单的小库,旨在解决一个看似复杂的问题 - 摆脱将一个对象映射到另一个对象的代码。