Как сделать дату отдельной с помощью EF6?

#asp.net-mvc #entity-framework #entity-framework-6

#asp.net-mvc #сущность-фреймворк #entity-framework-6

Вопрос:

Мне трудно выделить дату с помощью Entity Framework 6, например, у меня есть это в моей базе данных:

идентификатор пользователя назначенная дата
1 2020-12-09 18:58:38.213
2 2020-12-09 20:59:38.213
1 2020-12-09 22:13:38.214
1 2020-12-10 18:27:38.213
1 2021-01-05 10:27:38.213

Для пользователя 1 я хочу, чтобы он возвращался:

 2020-12-09
2020-12-10
2021-01-05
 

Это то, что у меня есть в detalle.cs модели:

 public DateTime? FechaAsignacionAlistado { get; set; }
 

Это то, что у меня есть в моем репозитории:

  public IList<DetalleSolicitud> GetDetallesPorUsuarioParaAsignacion(string userId)
    {
        return _context.DetalleSolicituds
            .Include(a => a.HistorialAsignacionAlistadors)
            .Include(s => s.Solicitudes.Pedido.ReservasProducs.Select(a => a.DetalleTalla.Producto))
            .Where(a => a.AlistadorId == userId).ToList();
    }
 

Что я пробовал, но не работает (я не знаю, что я делаю):

         public IList<DetalleSolicitud> GetDetallesPorUsuarioParaAsignacion(string userId)
    {
        return _context.DetalleSolicituds
            .Include(a => a.HistorialAsignacionAlistadors)
            .Include(s => s.Solicitudes.Pedido.ReservasProducs.Select(a => a.DetalleTalla.Producto))
            .GroupBy(a => a.FechaAsignacionAlistado).Distinct()
            .Where(a => a.AlistadorId == userId).ToList();
    }
 

Как мне этого добиться?

Комментарии:

1. Здесь есть несколько вопросов: 1. Используете ли вы .netcore проект? 2: Ваши DateTime данные отличаются, потому что они разные hours, minutes and seconds . Вы хотите исключить данные, которые дублируются в year, month, and day ?

2. 1. исправлено, это так asp.net mvc . 2. Я хочу игнорировать hours, minutes and seconds . Во всяком случае, я получил это, используя DbFunctions.TruncateTime((DateTime)a.FechaAsignacionAlistado)

3. Ваш FechaAsignacionAlistado должен быть обнуляемым? Могу ли я это изменить?

4. Что я могу вам помочь, так это: _context.DetalleSolicituds.Include(a => a.HistorialAsignacionAlistadors).Include(s => s.Solicitudes.Pedido.ReservasProducs.Select(a => a.DetalleTalla.Producto)).Where(a => a.AlistadorId == userId).GroupBy(a => a.FechaAsignacionAlistado.ToShortDateString()).Distinct().ToList(); ,но для этого нужно, чтобы вы удалили ? ….

5. Рад, что вы можете это решить :).

Ответ №1:

Я получил это, используя a .Groupby и a .Select , и работал отлично.

     public IEnumerable<DetalleSolicitud> GetDetallesPorUsuarioParaAsignacion(string userId)
    {
        return _context.DetalleSolicituds
            .Include(a => a.HistorialAsignacionAlistadors)
            .Include(s => s.Solicitudes.Pedido.ReservasProducs.Select(a => a.DetalleTalla.Producto))
            .Where(a => a.AlistadorId == userId)
            .GroupBy(a => DbFunctions.TruncateTime((DateTime)a.FechaAsignacionAlistado))
            .ToList().Select(x => new DetalleSolicitud { FechaAsignacionAlistado = x.Key });
    }