den folgenden Code-Schnipsel vor:IEnumerable <T> viel länger als IQueryable <T> wobei die Ergebnisse zurück
public interface IRepository<T> where T : class
{
IQueryable<T> GetAll();
...
}
public class EmployeeRepository<T> : IRepository<T> where T : class
{
private Employee db;
private DbSet<T> dbSet;
public EmployeeRepository()
{
db = new Employee();
dbSet = db.Set<T>();
}
public virtual IQueryable<T> GetAll()
{
return dbSet;
}
}
In der Steuerung implementieren ich es als:
private IRepository<Employee> employeeRepo = null;
public HomeController()
{
employeeRepo = new EmployeeRepository<Employee>();
}
den obigen Code verwenden, wenn ich rufe die employeeRepo.GetAll()
Methode in meiner MVC-Controller-Aktion bekomme ich das Ergebnis sofort in der Ansicht nicht mehr als 2 Sekunden, um die Datensätze von rund 500 Zeilen. Wenn ich den gleichen Code zu
public virtual IEnumerable<T> GetAll()
{
return dbSet.ToList();
}
dann ändern dauert es etwa 30 Sekunden die gleiche Menge an Zeilen aus exakt den gleichen Tisch zurückzukehren.
Also meine Frage ist, warum dauert IEnumerable<T>
so viel länger als IQueryable<T>
.
I Die meisten Beispiele online-Repository-Muster Einsatz gesehen habe IEnumerable<T>
so sicher, dass ich nicht, ob ich unter Verwendung IQueryable<T>
Update, um den richtigen Weg nach unten werde:
public ActionResult Index()
{
var allEmployees = employeeRepo.GetAll();
return View(allEmployees);
}
die SQL ausgeführt wird, ist
SELECT EMPLOYEEID, EMPLOYEENAME, EMPLOYEEDOB, EMPLOYEETELEPHONE FROM [DBO].[EMPLOYEE]
die genaue Anzahl der zurückgegebenen Zeilen ist 507. ich alle von ihnen, weil sie in einer Dropdown-Liste gehen
Sind Sie auf irgendwelche '.Where (...)' Klauseln auf das stecken? –
@ LasseV.Karlsen no '.Where()' Klausel – Code
Und wenn Sie sagen, Sie erhalten das Ergebnis sofort, füllen Sie tatsächlich die Ansicht und produzieren den endgültigen HTML * in diesen 2 Sekunden *, oder meinst du, dass die Methode GetAll innerhalb von 2 Sekunden zurückgegeben? –