获得此异常:“DbSortClause表达式必须具有可比较的类型。参数名称:key”

时间:2017-01-19 01:02:34

标签: c# asp.net-mvc entity-framework linq automapper

我有一些名为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作为解决方案。

其他任何想法如何解决这个问题?

0 个答案:

没有答案