Ich habe eine Get
-Methode, die Arbeitsauslagerung hat, aber ich möchte auch eine Methode erstellen, die mehrere Entitäten desselben Basistyps zurückgeben kann und immer noch Paging haben.Kann ich Multifil-EF-Entitäten in einem IQueryable verwenden, um Paging zu implementieren?
Ich weiß, dass dies irgendwie in SQL übersetzt werden muss, was ich als mehrere Ergebnismengen zurückgeben müsste.
// Model classes
public class Food
{
string Name {get;set;}
}
public class Fruit : Food
{
bool IsSweet {get;set;}
}
public class Vegetable : Food
{
bool IsGross {get;set;}
}
// FruitRepo -- BLL layer
public List<Fruit> GetFruit(int userId, int page, int itemsPerPage)
{
var query = repo.Get<Fruit>(e => e.userId == userId);
var dbResults = query.Skip((itemsPerPage * page) - itemsPerPage).Take(itemsPerPage).ToList();
return dbResults;
}
// FoodRepo -- BLL layer
public List<Food> GetFood(int userId, int page, int itemsPerPage)
{
// How can I use IQuerable here to implement paging correctly?
List<Food> rv = new List<Food>();
var repo = new Repo();
rv.AddRange(repo.Get<Fruit>(e => e.userId == userId).ToList());
rv.AddRange(repo.Get<Vegetable>(e => e.userId == userId).ToList());
return rv;
}
Ich glaube, das ist, was ich suche. Ich habe immer die Tabelle pro Entity gemacht, aber das sieht sehr vielversprechend aus. Der einzige mögliche Nachteil, den ich sehe, ist die Kombination vieler Tabellen/Entitäten, die für eine wirklich große Tabelle, irgendwelche anderen Dinge oder Einschränkungen sorgen können, um Code oder DB-Seite zu beachten? – user3953989
Tabelle-pro-Typ vs. Tabelle-pro-Hierarchie sollte keinen * Effekt * auf die Seitenauslieferung haben. Sie sollten in der Lage sein, mit beiden Vererbungsmustern zu blättern. –
@BradleyUffner Ich meinte irgendwelche Effekte im Allgemeinen, nicht spezifisch für Paging. – user3953989