我有一个名称为 Tag
的类。每个标签都有一些 News
、 Article
和 `Poll'。我想要 Get All Related Post 其中有 Tag 。
为此,我使用此查询:
public Tag Get(string tagName, int page, int recordsPerPage = 10)
{
int skip = page * recordsPerPage;
return
_tags.Where(tag => tag.Title.ToLower() == tagName.ToLower()).Include(row => row.Articles
.OrderByDescending(n => n.Code).Skip(skip).Take(recordsPerPage).ToList())
.Include(row => row.News.AsQueryable()).OrderBy(news => news.Code).Skip(skip).Take(recordsPerPage)
.Include(row => row.Polls).OrderByDescending(poll => poll.Code).Skip(skip).Take(recordsPerPage).FirstOrDefault();
}
但是当我运行 Project 时出现此错误:
The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties.
最佳答案
您不能将不是属性表达式的表达式传递给 Include 方法,查看您的代码
.Include(row => row.Articles.OrderByDescending(n => n.Code).Skip(skip).Take(recordsPerPage).ToList())
.Include(row => row.News.AsQueryable())
如您所见,在 include 中,您正在调用许多方法,这是不允许的。
你必须为此改变它:
.Include(row => row.Articles)
.Include(row => row.News)
让我尝试改进您的代码,您当前的代码是这样的:
_tags.Where(tag => tag.Title.ToLower() == tagName.ToLower()).Include(row => row.Articles
.OrderByDescending(n => n.Code).Skip(skip).Take(recordsPerPage).ToList())
.Include(row => row.News.AsQueryable()).OrderBy(news => news.Code).Skip(skip).Take(recordsPerPage)
.Include(row => row.Polls).OrderByDescending(poll => poll.Code).Skip(skip).Take(recordsPerPage).FirstOrDefault();
让我们在换行符中打破它
_tags.Where(tag => tag.Title.ToLower() == tagName.ToLower())
.Include(row => row.Articles.OrderByDescending(n => n.Code).Skip(skip).Take(recordsPerPage).ToList())
.Include(row => row.News.AsQueryable())
.OrderBy(news => news.Code)
.Skip(skip)
.Take(recordsPerPage)
.Include(row => row.Polls)
.OrderByDescending(poll => poll.Code)
.Skip(skip)
.Take(recordsPerPage)
.FirstOrDefault();
如果你只需要一个标签,你不需要做这个大的方法链,你可以使用这个来简化它:
public Tag Get(string tagName, int page, int recordsPerPage = 10)
{
return _tags.Include(tag => row.Articles).Include(tag => row.News).Include(tag => row.Polls)
.OrderBy(tag => news.Code)
.FirstOrDefault(tag => tag.Title.ToLower() == tagName.ToLower());
}
关于c# - 如何应用 Skip and Take on Include,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34528056/