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

时间:2013-10-25 12:47:26

标签: c# linq iqueryable

我需要一些帮助来处理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管道搞砸了,最终执行查询时我得到异常。

有谁知道我想做的事情是否可行?如果它是因为我们使用适配器函数在许多地方之间转换对象并且我宁愿重新使用它们而不必在线进行完全转换,那将会很棒。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

Converting IQueryable<T> object to another object?

答案 2 :(得分:-1)

AutoMapper正是您要找的。

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