2017-06-29 6 views
0

Ich arbeite derzeit mit ASP.NET Core und ich möchte mit Automapper einen Linq Ausdruck zuordnen. Die Mapping-Anweisung lautet:Asp.Net Core Automapper LINQ Ausdruck

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

wo Filter ein formaler Parameter in Form ist:

(Expression<Func<EntityDTO, bool>> filter 

im Mapping-Profil habe ich die folgende Karte erstellt:

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

I verwende ein generisches Repository-Muster mit EF. Ich möchte eine Liste von DTOs erhalten, die natürlich von den DTO-Feldern von meinem Controller gefiltert werden. Dann muss ich vom DTO-Filter in Entitätsfilter in der Business-Schicht konvertieren, bevor ich eine Abfrage mit Linq für EF durchführe.

Auch wenn der Ausdruck von EntityDTO in Entity konvertiert wird, sind die Parameter in den Lambda-Ausdrücken nicht korrekt, was zu Fehlern führt, wenn ich ihn mit EF weiter verwende. Irgendeine Idee, wie das gemacht werden kann?

+0

Haben Sie eine Karte für 'CreateMap ();'? – Win

+0

@Win. Ja, ich habe es – alexvilla

+0

Wie verwenden Sie es? Könnten Sie [mcve] (https://stackoverflow.com/help/mcve) erstellen? – Win

Antwort

1

Try this:

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

Das braucht Autoadapter Erweiterungen. – Mardoxx

+0

Das benötigt IQueryableExtensions und funktioniert mit allen IQueryable, einschließlich Entity Framework. Was ist ein Problem hier? –

+0

Danke @ YaserMoradi. Das war's! Ich habe diese Lösung schon einmal gesehen, aber ich konnte es aus irgendeinem Grund nicht funktionieren lassen. Danke noch einmal! – alexvilla