Sempre errore o meglio
il metodo del controller origale e Funzionante è :
public async Task<IActionResult> Dipendenti(string searchString, string sortOrder, string currentFilter, int? pageNumber)
{
string SNome = HttpContext.Session.GetString("NomeCliente");
ViewData["NomeCliente"] = SNome;
ViewData["CurrentSort"] = sortOrder;
ViewData["CognomeSortParm"] = String.IsNullOrEmpty(sortOrder) ? "Cognome_desc" : "";
ViewData["CodiceSortParm"] = sortOrder == "Codice" ? "Codice_desc" : "Codice";
if (searchString != null)
{
pageNumber = 1;
}
else
{
searchString = currentFilter;
}
ViewData["CurrentFilter"] = searchString;
var Dipendenti = from m in context.Dipendenti select m;
if (!String.IsNullOrEmpty(searchString))
{
Dipendenti = Dipendenti.Where(s => s.Cognome.Contains(searchString) || s.Nome.Contains(searchString) || s.CodiceFiscale.Contains(searchString));
}
int pageSize = 8;
return View(await PaginatedList<Dipendenti>.CreateAsync(Dipendenti.AsNoTracking(), pageNumber ?? 1, pageSize));
}
Invece la vorrei modificare usando una query sql server pura perchè le conosco meglio ed l ho modificata con .AsNoTracking() prima del ToListAsync
public async Task<IActionResult> Dipendenti(string searchString, string sortOrder, string currentFilter, int? pageNumber)
{
string SNome = HttpContext.Session.GetString("NomeCliente");
ViewData["NomeCliente"] = SNome;
ViewData["CurrentSort"] = sortOrder;
ViewData["CognomeSortParm"] = String.IsNullOrEmpty(sortOrder) ? "Cognome_desc" : "";
ViewData["CodiceSortParm"] = sortOrder == "Codice" ? "Codice_desc" : "Codice";
if (searchString != null)
{
pageNumber = 1;
}
else
{
searchString = currentFilter;
}
ViewData["CurrentFilter"] = searchString;
var Dipendenti = await context.Dipendenti.FromSqlRaw("SELECT * FROM Dipendenti ").AsNoTracking().ToListAsync();
if (!String.IsNullOrEmpty(searchString))
{
Dipendenti = await context.Dipendenti.FromSqlRaw("SELECT * FROM Dipendenti WHERE Cognome='" + searchString + "'").AsNoTracking().ToListAsync();
}
int pageSize = 8;
return View(await PaginatedList<Dipendenti>.CreateAsync(Dipendenti, pageNumber ?? 1, pageSize));
}
ed ora mi da errore su
return View(await PaginatedList<Dipendenti>.CreateAsync(Dipendenti, pageNumber ?? 1, pageSize));
Errore CS1503 Argomento 1: non è possibile convertire da 'System.Collections.Generic.List<paghe.Models.Dipendenti>' a 'System.Linq.IQueryable<paghe.Models.Dipendenti>'
il model della view è
@model PaginatedList<paghe.Models.Dipendenti>
e la classe PaginateList è
public class PaginatedList<T> : List<T>
{
public int PageIndex { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
TotalPages = (int)Math.Ceiling(count / (double)pageSize);
this.AddRange(items);
}
public bool HasPreviousPage
{
get
{
return (PageIndex > 1);
}
}
public bool HasNextPage
{
get
{
return (PageIndex < TotalPages);
}
}
public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
{
var count = await source.CountAsync();
var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
return new PaginatedList<T>(items, count, pageIndex, pageSize);
}
}
se provo a modificare la CreateAsync
public static async Task<PaginatedList<T>> CreateAsync(IEnumerable<T> source, int pageIndex, int pageSize)
{
var count = await source.CountAsync();
var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
return new PaginatedList<T>(items, count, pageIndex, pageSize);
}
mi da errore su
var count = await source.CountAsync();
Errore CS1061 'IEnumerable<T>' non contiene una definizione di 'CountAsync' e non è stato trovato alcun metodo di estensione accessibile 'CountAsync' che accetta un primo argomento di tipo 'IEnumerable<T>'. Probabilmente manca una direttiva using o un riferimento all'assembly.
e su
var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
Gravità Codice Descrizione Progetto File Riga Stato eliminazione
Errore CS1061 'IEnumerable<T>' non contiene una definizione di 'ToListAsync' e non è stato trovato alcun metodo di estensione accessibile 'ToListAsync' che accetta un primo argomento di tipo 'IEnumerable<T>'. Probabilmente manca una direttiva using o un riferimento all'assembly.