Код: Выделить всё
public IQueryable Query(bool includeRelated = false)
{
var allItems = _context.GetTable().AsQueryable();
if (includeRelated)
{
allItems = allItems
.LoadWith(r => r.Request).ThenLoad(w => w.Addresses)
.LoadWith(r => r.Request).ThenLoad(w => w.TurnedOffObjects)
.LoadWith(r => r.Request).ThenLoad(w => w.Executor)
.LoadWith(r => r.District)
.LoadWith(r => r.RospotrebnadzorNotes);
}
var orderedItems = allItems.OrderBy(log => log.TurnedOffOn);
var numberedItems = orderedItems.ToArray();
for ( var i = 0; i< numberedItems.Length; i++)
{
numberedItems[i].SequenceNumber = i + 1;
}
return numberedItems.AsQueryable();
}
Например, это дает исключение:
Код: Выделить всё
var orderedItems = allItems.OrderBy(log => log.TurnedOffOn);
var sequenceNumber = 0;
foreach (var item in orderedItems)
{
item.SequenceNumber = sequenceNumber++;
}
return orderedItems;
Код: Выделить всё
public IQueryable Query(bool includeRelated = false)
{
var allItems = _context.GetTable().AsQueryable();
if (includeRelated)
{
allItems = allItems
.LoadWith(r => r.Request).ThenLoad(w => w.Addresses)
.LoadWith(r => r.Request).ThenLoad(w => w.TurnedOffObjects)
.LoadWith(r => r.Request).ThenLoad(w => w.Executor)
.LoadWith(r => r.District)
.LoadWith(r => r.RospotrebnadzorNotes);
}
var orderedItems = allItems.OrderBy(log => log.TurnedOffOn);
return orderedItems.OrderBy(log => log.TurnedOffOn)
.Select((log, index) => new RequestLog // create a new instance to avoid in memory changes
{
Id = log.Id,
SequenceNumber = index + 1,
// other fields
}).AsQueryable();
}
Я получил этот запрос
Код: Выделить всё
var query = _store.RequestsLog.Query(true).Where(filter);
Код: Выделить всё
public IQueryable Query(bool includeRelated = false)
{
var allItems = _context.GetTable().AsQueryable();
if (includeRelated)
{
allItems = allItems
.LoadWith(r => r.Request).ThenLoad(w => w.Addresses)
.LoadWith(r => r.Request).ThenLoad(w => w.TurnedOffObjects)
.LoadWith(r => r.Request).ThenLoad(w => w.Executor)
.LoadWith(r => r.District)
.LoadWith(r => r.RospotrebnadzorNotes);
}
var orderedItems = allItems.OrderBy(log => log.TurnedOffOn);
return orderedItems.OrderBy(log => log.TurnedOffOn)
.Select(log => new RequestLog
{
Id = log.Id,
SequenceNumber = (int)Sql.Ext.RowNumber().Over().OrderBy(log.TurnedOffOn).ToValue(),
//other fields
});
}
Код: Выделить всё
SELECT
[p].[Id],
ROW_NUMBER() OVER(ORDER BY [p].[TurnedOffOn]),
Код: Выделить всё
var response = OrderItems(query, request.Sort)
.TakePage(request.Page)
.ProjectTo(RequestLogMappers.Mapper.ConfigurationProvider)
.AsPagedList(totalCount);
Это метод OrderBy, в котором, вероятно, возникает проблема:
Код: Выделить всё
public static IOrderedQueryable OrderBy(this IQueryable src, string propertyName, bool reverse = false)
{
var propertyInfo = typeof(T).GetProperty(propertyName);
if (propertyInfo == null)
throw new ArgumentException($"property {propertyName} not found on object {typeof(T).Name}");
var keySelector = BuildKeySelector(propertyInfo);
var targetMethodName = !reverse ? "TargetOrderBy" : "TargetOrderByDescending";
var methodInfo = typeof(QueryableExtensions).GetMethod(targetMethodName, BindingFlags.NonPublic | BindingFlags.Static);
if (methodInfo == null)
throw new Exception($"can't bind to generic target method {targetMethodName}");
var method = methodInfo.MakeGenericMethod(typeof(T), propertyInfo.PropertyType);
return method.Invoke(null, new[] {src, keySelector}) as IOrderedQueryable;
}
И когда я проверяю внутреннее исключение, подобное этому
Код: Выделить всё
try
{
response = OrderItems(query, request.Sort)
.TakePage(request.Page)
.ProjectTo(RequestLogMappers.Mapper.ConfigurationProvider)
.AsPagedList(totalCount);
}
catch (TargetInvocationException ex)
{
var innerException = ex.InnerException;
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ialization
Мобильная версия