我有一些名为Box
es的对象,我试图在表格中列出。为此,我使用Automapper将它们映射到我的BoxedElectrodesRowModel
。但是,我遇到了很多麻烦,因为每个Box
都有另一个嵌套在其中的对象,称为SerialNumber
。
具体来说,尝试将每个SerialNumberName
的{{1}}的{{1}}列表映射到我的Box
SerialNumber
字符串列表中造成很多问题。
以下是AutoMapper代码:
SerialNumber
以下是发生异常的代码,在我的IQueryableExtensions.cs文件中
BoxedElectrodesModel
错误,
DbSortClause表达式必须具有可比较的类型。 参数名称:key
发生在底部的c.CreateMap<Box, BoxedElectrodesRowModel>()
.ForMember(dest => dest.BoxId, opts => opts.MapFrom(src => src.BoxID))
.ForMember(dest => dest.SerialNumbers, opts => opts.MapFrom(src => src.SerialNumbers.Select(t => t.SerialNumberName)))
.ForMember(dest => dest.DateCreated, opts => opts.MapFrom(src => src.DateCreated));
部分。我对这个项目很新,不知道是什么导致了这个错误发生。
经过一些研究,我发现了一个潜在的解决方案,即将public static DataTablesResponse ToDataTablesResponse<TDataModel, TJsonModel>(this IQueryable<TDataModel> data,
IDataTablesRequest param, IConfigurationProvider cfgProvider)
{
int totalCount = (data == null) ? 0 : data.Count();
if (totalCount == 0)
{
return new DataTablesResponse(param.Draw, Enumerable.Empty<TJsonModel>(), 0, 0);
}
var rows = data.ProjectTo<TJsonModel>(cfgProvider);
// Apply search
var searchableColumns = param.Columns
.Where(c => c.Searchable == true)
.Select(c => c.Data)
.ToArray();
var filteredRows = rows.FilterOnColumns(searchableColumns, param.Search.Value);
// Apply sorting
var sortedColumns = param.Columns.GetSortedColumns()
.ToDictionary(
sc => sc.Data,
sc => sc.SortDirection == Column.OrderDirection.Ascendant
);
var sortedRows = filteredRows.OrderByColumns(sortedColumns);
// Apply pagination
var pagedRows = sortedRows
.Skip(param.Start)
.Take(param.Length)
.ToList();
return new DataTablesResponse(param.Draw, pagedRows, filteredRows.Count(), totalCount);
}
添加到Automapper代码中序列号行的末尾。但是,这导致了新的错误:
缺少从System.Char到System.String的映射。创建使用 Mapper.CreateMap
因为Automapper试图映射每个字符串的FirstOrDefault 字符而不是字符串列表中的第一个字符。所以现在,我决定不再添加FirstOrDefault作为解决方案。
其他任何想法如何解决这个问题?