[英]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.