Ho una tabella con alcuni dati che voglio selezionare le righe con date univoche utilizzando il framework di entità core .NET. Voglio restituire i risultati come un elenco delle righe univoche. Ecco il codice.
public async Task<IEnumerable<Records>> GetUniqueRecordsByDate(int bId)
{
var rowsToReturn = await _context.Records
.Where(b => b.SId == bId)
.Select(d => d.Date)
.Distinct()
.OrderBy(d => d)
.ToListAsync();
return rowsToReturn;
}
Sto cercando di applicare il codice sopra ma ottengo questo errore
Impossibile convertire implicitamente il tipo 'System.Collections.Generic.List <System.Linq.Grouping <System.DateTime, Test.API.Models.Records >>' a 'System.Collections.Generic.IEnumerable <Test.API.Models.Record >'. Esiste una conversione esplicita (ti manca un cast?)
C'è qualche altro modo che posso implementare per ottenere le mie aspettative o mi manca qualcosa nel mio codice?
Per prima cosa crea un DTO
come segue:
public class RecordsByDateDTO
{
public DateTime Date {get; set;}
public List<Record> Records {get; set;}
}
Per selezionare le righe con date univoche, devi utilizzare .GroupBy
e scrivere il metodo GetUniqueRecordsByDate
come segue:
public async Task<List<RecordsByDateDTO>> GetUniqueRecordsByDate(int bId)
{
var recordsByDate = await _context.Records.Where(r => r.SId == bId).GroupBy(r => r.Date)
.Select(group => new RecordsByDateDTO
{
Date = group.Key,
Records = group.ToList()
}).OrderBy(r => r. Date).ToListAsync();
return recordsByDate;
}
var rowsToReturn = await _context.Records
.Where(b => b.SId == bId)
.Select(d => d.Date)
.Distinct()
.OrderBy(d => d)
.AsEnumerable()
.ToListAsync();
return rowsToReturn;
Utilizzare AsEnumerable () prima di ToListAsync (). Funzionerà.