작동하는 페이징을 가지고있는 Get
메서드가 있지만 동일한 기본 형식의 여러 엔터티를 반환 할 수 있고 여전히 페이징을 가질 수있는 메서드를 만들고 싶습니다.IQueryable에서 multilpe EF Entities를 사용하여 페이징을 구현할 수 있습니까?
저는 이것이 여러 가지 결과 집합으로 반환되어야한다고 생각하니 SQL로 변환해야한다는 것을 알고 있습니다.
// 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;
}
나는 이것이 내가 찾고있는 것이라고 생각한다. 필자는 항상 Entity 방식으로 Table을 작성했으나 이것은 매우 유망 해 보입니다. 내가 볼 수있는 유일한 단점은 많은 테이블/엔티티를 결합하여 정말 넓은 테이블을 만들 수 있다는 것입니다. 다른 것들 또는 제한 사항은 코드 또는 DB 측면을 인식하고 있습니까? – user3953989
테이블 당 유형 대 테이블 당 계층 구조는 결과가 페이지되는 방법에 영향을 미치지 않아야합니다. 상속 패턴을 사용하여 페이징을 수행 할 수 있어야합니다. –
@BradleyUffner 나는 페이징에 국한된 것이 아니라 일반적인 모든 효과를 의미했습니다. – user3953989