Как упорядочить по нужной коллекции max свойство - PullRequest
0 голосов
/ 24 января 2019

У меня есть таблица с пользователями, и у каждого может быть много LogActivity, поэтому существует отношение один ко многим.Я хочу отсортировать коллекцию пользователей по их максимальному свойству DateSearch of LogActivities (другими словами, пользователи с самыми ранними LogActivities будут в топе).Но коллекция LogsActivities может быть пустой.Другое требование - пользователи должны оставаться как IQuerable, это важно из-за производительности.

"Недопустимое исключение операции: при чтении значения базы данных возникла исключительная ситуация. Ожидаемый тип: System.DateTime"но фактическое значение имело тип 'System.String' ") и предупреждения (" Выражение LINQ "Max ()" "не удалось перевести и будет оцениваться локально."

//(ToListAsync just for testing \\ identities is IQuerable<User>)

//(defaultLogsActivity is LogActivity with DateSearch = DateTime.MinValue)
var qwe = await identities.OrderBy(u => u.LogsUserActivity.DefaultIfEmpty(defaultLogsActivity))
                                .ToListAsync();// => exception("Expression of type 'UserService.Data.TDO_Models.ManagerUsers.LogsUserActivityEntity' cannot be used for parameter of type 'Microsoft.EntityFrameworkCore.Storage.ValueBuffer' of method DefaultIfEmpty")

var qwe = await identities.OrderBy(u => (u.LogsUserActivity.Count != 0) ? u.LogsUserActivity.Max(l => l.DateSearch) : DateTime.MinValue )
                                .ToListAsync(); //=> exception ("Invalid operation excpetion: An exception occurred while reading a database value. The expected type was 'System.DateTime' but the actual value was of type 'System.String'") and warnings ("The LINQ expression '"Max()"' could not be translated and will be evaluated locally.")


 public class User{
    public Guid Id { get; set; }
    public List<LogActivity> LogActivities { get; set; }
} 

public class LogActivity{
   public DateTime DateSearch { get; set; }
}

1 Ответ

0 голосов
/ 24 января 2019

Похоже, у вас возникла проблема с приведением извлеченных данных из базы данных.

Вы можете попробовать добавить в свою модель [Timestamp] или [Column(TypeName = "datetime")]

Это должно решить вашу проблему.

...