2013-10-25 33 views
0

我需要一些帮助来处理数据项的IQueryable集合,然后将它们选择到一个新表单中。Queryable Select中的内联函数调用

下面的方法被调用,以从存储库中获得一些数据:

var data = this.repository.GetAllPersonalDetails(); 

我想,然后集合中转换每个项目我都使用下面的业务对象:

这工作正常,一切都很好,但业务对象是相当大的,我想利用适配器功能,将数据对象映射到业务对象。不过,如果我使用类似于下面的代码:

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

那么整个可查询管道被弄乱了,我得到的例外情况,最终执行查询。

有谁知道我想要做什么是可能的?如果这是因为我们使用适配器函数在多个位置对象之间进行转换,我宁愿重复使用它们,而不必完成内嵌转换。

回答

-1

AutoMapper是你在找什么。

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

+0

@downvoter为什么? –

+0

听起来像是给我的广告。考虑提供简短的代码片段,而不是这个便宜的描述。 –

+0

这不是广告;所有的开源项目都在使用和学习。 –

1

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

有很多不同的ORM(对象关系映射器)将数据库对象映射到业务对象,但是它们甚至必须生成一些适配器。例如,实体框架使用模板来生成映射类,并将它们隐藏在上下文类型下,因此您不会对它感到困扰。

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

+0

感谢您的回复Ondrej。上面代码段中提到的存储库是使用迄今为止运行良好的LLBLGen ORM工具实现的。转换是在LLBLGen实体类型与我们自己的Busines实体类型之间进行的。我们不能切换到EF,但我可能会查找您提到的上下文类型。干杯。 – Apogee

+0

@Apogee抱歉,通知您,不容易。希望我的回答让你更清楚地思考问题。 –

+0

我结束了以下指导给这个答案 - http://stackoverflow.com/questions/5523792/converting-iqueryablet-object-to-another-object - 谢谢你的帮助,但。 – Apogee