【发布时间】:2017-06-03 13:55:13
【问题描述】:
我有一些名为Boxes 的对象,我正试图在表格中列出这些对象。为此,我使用 Automapper 将它们映射到我的BoxedElectrodesRowModel。但是,我遇到了很多麻烦,因为每个Box 中都嵌套了另一个对象,称为SerialNumber。
具体来说,尝试将每个Box 的SerialNumbers 中的SerialNumberNames 列表映射到我的BoxedElectrodesModel 中的SerialNumber 字符串列表似乎会导致很多问题。
这是 AutoMapper 代码:
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));
这是发生异常的代码,在我的 IQueryableExtensions.cs 文件中
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);
}
错误,
DbSortClause 表达式必须具有顺序可比的类型。 参数名称:key
出现在底部的// Apply pagination 部分。我对这个项目还很陌生,不知道是什么导致了这个错误的发生。
经过一番研究,我找到了一个潜在的解决方案,即在 Automapper 代码的序列号行末尾添加.FirstOrDefault()。但是,这导致了新的错误:
缺少从 System.Char 到 System.String 的映射。使用创建 Mapper.CreateMap
因为 Automapper 试图映射每个字符串的 FirstOrDefault character 而不是字符串列表中的第一个。所以现在,我决定取消添加 FirstOrDefault 作为解决方案。
任何其他想法如何解决这个问题?
【问题讨论】:
标签: c# asp.net-mvc entity-framework linq automapper