2017-06-29 70 views
0

我目前正在使用ASP.NET Core,並且我想使用Automapper來映射Linq表達式。映射聲明:Asp.Net核心Automapper LINQ表達式

var targetConditions = _mapper.Map<Expression<Func<Entity, bool>>>(filter); 

其中過濾是形式正式參數:

(Expression<Func<EntityDTO, bool>> filter 

在映射輪廓,我有以下地圖創建:

CreateMap<Expression<Func<EntityDTO, bool>>, Expression<Func<Entity, bool>>>(); 

我在EF中使用通用存儲庫模式。我想獲得一個DTO列表,當然,這是我的控制器的DTO字段。然後,我需要在使用Linq for EF進行任何查詢之前,先從業務層的DTO過濾器轉換爲實體過濾器。

即使該表達式從EntityDTO轉換爲Entity,lambda表達式中的參數也不會在我與EF繼續使用時引發各種錯誤。任何想法如何做到這一點?

+0

你有一個地圖'CreateMap ();'? – Win

+0

@Win。是的,我確實有 – alexvilla

+0

你如何使用它?你可以創建[mcve](https://stackoverflow.com/help/mcve)嗎? – Win

回答

1

試試這個:

IQueryable<Customer> query = repository.getCustomers(); // entities query 
query.ProjectTo<CustomerDto>().Where(dtoFilterExpression) 
+1

這需要automapper擴展名。 – Mardoxx

+0

這需要IQueryableExtensions,並與任何IQueryable一起使用,包括實體框架。這裏有什麼問題? –

+0

謝謝@YaserMoradi。就是這樣!我之前看到過這個解決方案,但由於某種原因我無法完成工作。再次感謝! – alexvilla