這個問題在這里已經有了答案: 無法在 LINQ to Entities 查詢中構造物體或復雜型別“”[重復] (1 個答案) 12 天前關閉。
我創建了一個自動映射器
CreateMap<Records_Log, Records_LogDto>()
.ForMember(dest => dest.UserName, opt =>
{
opt.ResolveUsing(d => d.User.UserName);
});
記錄_日志
public class Records_Log
{
public int Id { get; set; }
public string Table_name { get; set; }
[ForeignKey("Records")]
public int RecordsId { get; set; }
public Records Records { get; set; }
public int RecordId { get; set; }
public string OldValue { get; set; }
public string NewValue { get; set; }
[ForeignKey("User")]
public string UserId { get; set; }
public ApplicationUser User { get; set; }
public DateTime ChangeDate { get; set; }
public string Action { get; set; }
}
Records_LogDto
public class Records_LogDto
{
public int Id { get; set; }
public string Table_name { get; set; }
public int RecordsId { get; set; }
public Records Records { get; set; }
public int RecordId { get; set; }
public string OldValue { get; set; }
public string NewValue { get; set; }
public string UserId { get; set; }
public string UserName { get; set; }
public string Action { get; set; }
public DateTime ChangeDate { get; set; }
}
記錄:
public class Records
{
public int Id { get; set; }
public string SerialName { get; set; }
public string RecordsName { get; set; }
public string Url { get; set; }
public string AttachmentPath { get; set; }
public string ImagePath { get; set; }
public string RecordsNameModified { get; set; }
public bool isDeleted { get; set; }
public bool isRead { get; set; }
public bool IsHidden { get; set; }
public bool MarkAsImportant { get; set; }
public string ImportantComments { get; set; }
public int subTypeID { get; set; }
public virtual ICollection<Records_Rate> Records_Rate { get; set; }
}
我的查詢
var query = (from st in db.Records_State
join sl in db.Records_Log
on st.Records.Id equals sl.RecordsId
where st.Records.isDeleted
&& sl.Table_name == nameof(Records)
&& sl.Action == "Deleted"
&& sl.NewValue == "Top"
&& (string.IsNullOrEmpty(recordsName) || sl.Records.RecordsName.Contains(recordsName)
|| sl.Records.RecordsNameModified.Contains(recordsName))
&& (fromDate == null || sl.ChangeDate >= fromDate)
&& (toDate == null || sl.ChangeDate <= toDate)
orderby sl.ChangeDate descending
select new Records_Log {
Records= st.Records,
ChangeDate= sl.ChangeDate
})
.AsQueryable();
query = from p in query
group p by p.Records.Id
into pGroup
orderby pGroup.Key
select pGroup.FirstOrDefault();
var result = query.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)
.OrderByDescending(st => st.Id);
var dto = Mapper.Map<List<Records_LogDto>>(result);
現在在最后一行var dto = Mapper.Map<List<Records_LogDto>>(result);
它拋出例外:
錯誤映射型別。\r\n\r\n映射型別:\r\nDbQuery1 -> List1\r\nSystem.Data.Entity.Infrastructure.DbQuery1[[PortalBackEndAPI.Models.Records_Log, PortalBackEndAPI.Core, Version=1.0.0.0 , Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.List1[[PortalBackEndAPI.Dto.Records_LogDto, PortalBackEndAPI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}
和
無法在 LINQ to Entities 查詢中構造物體或復雜型別“PortalBackEndAPI.Models.Records_Log”
uj5u.com熱心網友回復:
您傳遞給 map 方法的物件仍然是型別 DBQuery,Automapper 沒有為其配置映射。錯誤代碼提示了這一點!您傳遞的物件不是 Records_Log 型別的原因是因為您還沒有讓它決議。
檢查您是否可以在 DBQuery 上呼叫 ToList 或 ToListAsync 方法,如下例所示。
var dto = Mapper.Map<List<Records_LogDto>>(result.ToList());
// Or
var dto = Mapper.Map<List<Records_LogDto>>(await result.ToListAsync());
其中一種方法(還有其他方法)將強制決議 DBQuery 并將其加載到串列中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/507007.html
上一篇:使用EntityFrameworkCore管理一對多關系
下一篇:.NETClean架構-多個專案
