我可以在IQueryable中使用multilpe EF实体来实现分页吗?

我有一个Get方法有工作分页,但我也想创建一个方法,可以返回多个相同的基本类型的实体,仍然有分页。我可以在IQueryable中使用multilpe EF实体来实现分页吗?

我知道这必须转化为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;

}

回答:

这实际上取决于你如何建模EF中的实体。 EF可以按照different strategies with inheritance

如果继承的类simmilar我通常选择按层次结构表。 所选策略会影响SQL性能,但您可以在所选策略的业务逻辑中进行抽象。

你只需要调用一次EF填充列表和EF数据重新集成到相应的继承类:

repo.Get<Food>(e => e.userId == userId).ToList()); 

回答:

而是从BLL返回List<T>的,返回一个PagedList<T>,其中,除其他外的东西,可以包括页数:

Public class PagedList<T> { 

public List<T> Results { get; set; }

public int PageNumber { get; set; }

public int TotalCount { get; set; }

}

然后你GetFruit/GetFood方法可以是这样的:

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 new PagedList<Fruit>()

{

Results = dbResults,

PageNumber = page,

TotalCount = query.Count(),

}

}

以上是 我可以在IQueryable中使用multilpe EF实体来实现分页吗? 的全部内容, 来源链接: utcz.com/qa/266193.html

回到顶部