2016-06-22 4 views
4

Dies ist eine Frage für Automapper Profis. Ich habe schon seit einigen Tagen versucht, Query Mapping durchzuführen - und kein Glück. Es scheint, als ob Automapper nicht so verwendet werden soll, wie ich es benutzen möchte. Aber vielleicht liege ich falsch. Also hier ist die Frage ...Ist es möglich IQQueryable <CatDTO> zu IQueryable <CatEf> zuzuordnen?

Ich habe solche Klassen:

  • CatDto (Name, Alter, Sexspielzeuge (Sammlung von ToyDto Objekte))
  • ToyDto (catName, ToyName, Katze (Mutter CatDto Objekt))
  • Katze (kommt von Entity Framework, hat Eigenschaften ähnlich denen in CatDto)
  • Spielzeug (kommt von Entity Framework, hat Eigenschaften ähnlich denen in ToyDto)

Ich möchte eine allgemeine Lesefunktion in meine Datenzugriffsschicht schreiben, so etwas wie dieses:

IEnumerable<CatDto> Read(IQueryable<CatDto> query) { 
    // here "query" is converted 
    // to Entity Framework query by means of AutoMapper, 
    // EF query gets executed, 
    // I convert EF entities (Cat) back to CatDto - this is not essential 
    // result is returned 
} 

Ich werde diese Funktion auf unterschiedliche Weise aufrufen. Beispiel:

var q = new ObjectModel.Collection(Of CatDto)).AsQueryable(); 
q = q.Where(c => c.Toys.Count() > 1); 
var someResultVar = Read(q); 

Bisher sind Versuche zur Implementierung eines solchen Verhaltens fehlgeschlagen. Ich frage mich, ob Automapper hier ein Helfer ist oder gehe ich völlig falsch?

+0

Werfen Sie einen Blick auf die [Queryable Extensions Seite] (https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions) – stuartd

+0

@stu artd Da war das erledigt - keine Hilfe von dieser Seite. – Dima

+0

Sie haben also versucht, die empfohlene Projektionssyntax von dieser Seite zu verwenden, dh 'return query.ProjectTo ()'? Es würde helfen, wenn Sie diese Details in Ihre Frage aufnehmen würden, um Zeit zu sparen. – stuartd

Antwort

1

Ich glaube, die Funktionalität, die Sie wollen, ist in UseAsDataSource

Sie können nicht IQueryable Karte, aber Sie sollten nicht brauchen, um mit UseAsDataSource Beispiel

IQueryable<CatDto> someResultVar = new ObjectModel.Collection(Of CatDto)).AsQueryable().UseAsDataSource().For(Of OrderLineDTO).Where(c => c.Toys.Count() > 1); 

Wenn Sie es aufzählen wird Lambda konvertieren von CatDto to CatEf und rufen Sie ProjectTo<CatDto> und zurück CatDto Objekte

Verwandte Themen