2016-04-01 12 views
0

ich Entity Framework verwende und ich versuche, mit Einheiten zu einem dto Objekt abzubilden den folgenden Code verwenden, aber etwas schief läuft:Mapping Entity Framework Einheit DTO-Objekt wählen

var fileUploads = _dbContext.FileUploads.Include("DocumentType").Include("Store"); 

if (jobSearchParams.DocumentTypeId != null) 
{ 
    fileUploads = fileUploads.Where(x => x.DocumentTypeID == 6); 
} 

if (jobSearchParams.StoreId != null) 
{ 
    fileUploads = fileUploads.Where(x => x.StoreID == jobSearchParams.StoreId); 
} 

if (!string.IsNullOrEmpty(jobSearchParams.Name)) 
{ 
    fileUploads = fileUploads.Where(d => d.Name.Contains(jobSearchParams.Name)); 
} 

var dtos = Mapper.Map<IEnumerable<JobDocumentDto>>(documents); 

var cnt = fileUploads.Count(); // 1412 

var fileDocuments = fileUploads.AsEnumerable().Select(d => new JobDocumentDto 
{ 
    DocumentID = d.ID, 
    StoreID = d.StoreID, 
    StoreName = d.Store.Name, 
    Document = Mapper.Map<DocumentDto>(d), 
    DocumentName = d.Name 
}).ToList(); 

cnt = fileDocuments.Count; // 0 

Mit dem AsEnumerable in der Ausdruck ich habe 0 Objekte nach der Auswahl tun und wenn ich entfernen sie die AsEnumerable ich die folgende Fehlermeldung erhalten:

System.NotSupportedException: LINQ to Entities does not recognize the method 'DataManagement.DTOs.DocumentDto MapDocumentDto' method, and this method cannot be translated into a store expression

Antwort

2

hinzufügen .ToList() vor Select, so dass es .ToList().Select(...)... machen.

Reason: LINQ is trying to convert the entire new JobDocumentDto {...} statement into query form, but it can't. By running the query earlier this problem is avoided.

Auch jetzt die AsEnumerable() kann überflüssig sein, versuchen Sie es einfach zu entfernen.

+1

Im Allgemeinen wird Linq to Enitities keine Methode innerhalb des Select-Bereichs akzeptieren - weil Sie mit der von Entity Framework generierten Abfrage nicht die Daten bearbeiten, sondern erst nach dem Aufruf von ToList() oder ToDictionary() tatsächlich die Daten aus der Datenbank haben . (nur eine kleine Bemerkung, die für jemanden von Nutzen sein könnte) – Vladimir

Verwandte Themen