我正在使用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'方法,并且该方法无法转换为商店表达式
.ToList()
在选择之前添加,因此使其成为.ToList().Select(...)...
。
原因:LINQ试图将整个
new JobDocumentDto {...}
语句转换为查询形式,但是不能。通过更早运行查询,可以避免此问题。
另外,AsEnumerable()
现在可能是多余的,只需尝试将其删除即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句