0

我需要一些帮助来处理数据项的 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));

然后整个 Queryable 管道变得混乱,最终执行查询时出现异常。

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

4

3 回答 3

1

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

将 IQueryable<T> 对象转换为另一个对象?

于 2013-10-30T15:09:11.687 回答
1

问题是,必须在某个地方定义从存储库对象到业务对象的映射。如果没有这个或像你一样使用 LINQ 选择,你就无法让它工作。

有许多不同的 ORM(对象关系映射器)将数据库对象映射到业务对象,但即使它们也必须生成一些适配器。例如,Entity Framework 使用模板来生成映射类并将它们隐藏在上下文类型下,这样您就不会被它打扰。

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

于 2013-10-25T13:08:17.960 回答
-1

AutoMapper是您正在寻找的。

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

于 2013-10-25T12:54:12.867 回答