簡體   English   中英

使用select將Entity Framework實體映射到dto對象

[英]Mapping Entity Framework entity to dto object using select

我正在使用Entity Framework,並且嘗試使用以下代碼將使用實體映射到dto對象,但出了點問題:

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

在表達式中使用AsEnumerable進行選擇后,我有0個對象,如果刪除了AsEnumerable ,則會出現以下錯誤:

System.NotSupportedException:LINQ to Entities無法識別方法'DataManagement.DTOs.DocumentDto MapDocumentDto'方法,並且該方法無法轉換為商店表達式

在Select之前添加.ToList() ,使其成為.ToList().Select(...)...

原因:LINQ試圖將整個new JobDocumentDto {...}語句轉換為查詢形式,但是不能。 通過更早運行查詢,可以避免此問題。

而且, AsEnumerable()現在可能是多余的,只需嘗試將其刪除即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM