我试图弄清楚如何在两种类型之间转换 Linq 表达式:一种在我的业务存储库中,一种在域存储库中。两种类型都具有将在查询中使用的相同数据属性。在我的业务层中,我有以下方法将基于业务实体执行查询:
业务存储库:域实体转换为业务实体
public IQueryable<CustomerVendorProduct> Query(Expression<Func<CustomerVendorProduct,bool>> filterInBusinessRepo)
因此,消费者可以执行以下操作:
var list = BusinessRepository.Query(c => c.CustomerId == 77);
他们将获得 CustomerId == 77 的 CustomerVendorProduct 业务对象列表。
在 Business Repository 的 Query() 方法中,我需要在 Domain Repository 中调用以下方法。它将从数据库中检索原始的加密域实体。请注意,它的查询需要域存储库中使用的实体类型。它与我们的业务实体有关,但仅涉及 CRUD 操作。
域存储库:来自数据库的原始加密实体
public IQueryable<CustomerVendorProductEntity> Query(Expression<Func<CustomerVendorProductEntity, bool>> filter)
因此,Business Repository 中的 Query() 方法将执行以下操作:
var domainList = DomainRepository.Query(filterInBusinessRepo);
结果将是 CustomerVendorProductEntity 对象的列表。然后,业务存储库将它们转换为 CustomerVendorBusiness 实体并将它们返回给调用者。
所以,我的问题是如何将 Linq 表达式从业务存储库实体类型:CustomerVendorProduct 转换为域存储库实体类型:CustomerVendorProductEntity?我认为我必须创建一种转换方法...类似于以下内容...但是,我不知道如何实现转换。我将衷心感谢您的帮助:
// Convert the Linq Expression from our Business Layer to our Domain Layer.
private Expression<Func<CustomerVendorProductEntity, bool>> CVPToCVPE(Expression<Func<CustomerVendorProduct, bool>> filter)
{
var parms = System.Linq.Expressions.Expression.Parameter(typeof(CustomerVendorProductEntity), "destination");
var result = System.Linq.Expressions.Expression.Lambda<Func<CustomerVendorProductEntity, bool>>(filter, parms);
return result;
}
感谢您的时间和建议!麦克风
2012 年 11 月 2 日:哇,没有回复?我原以为很多其他开发人员都遇到过这个问题,尤其是在 MVC 应用程序中......仍然希望得到帮助......