как получить данные из базы данных с помощью запроса linq для отношения 1: N и N: N (между 3 сущностями) в asp.net mvc EF-код в первую очередь?

63
4

У меня есть запрос linq для извлечения данных из 3-х таблиц (Post, Category, Tag).

Я хочу показать последние сообщения (10 номеров) в странице по умолчанию в блоге: название должности, название тегов и название категории, опубликуйте краткое описание. я введите этот запрос linq

List<Post> IBlogRepository.PostsForList(int pageNo, int pageSize)
{
using (var context = new MJBweblogContext())
{
IQueryable posts = from Post in context.Posts
where Post.Published == true
select new
{
Post.Title,
Post.ShortDescription,
Post.Description,
Post.MetaData,
Post.PostedOn,
Post.UrlSlug,
Post.Published,
Post.Modified,
Post.Category,
Post.Tags,
Post.Category.Name,
};
if (posts != null)
{
return posts.OfType<Post>() // i give error if i remove OfType<Post>()
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.ToList();
}
else
{
return null;
}
}
}

но у меня две проблемы:

если я удалю OfType() VS2017, скажите мне:

Ошибка CS0266 Невозможно неявно преобразовать тип 'System.Linq.IQueryable' в 'System.Collections.Generic.List'. Явное преобразование существует (вам не хватает роли?) MJBweblog C:\Users\mjb\source\repos\MJBweblog\MJBweblog\DAL\BlogRepository.cs 44 Active

Я не знаю, какой код я должен писать для получения тегов для каждого сообщения и их категории? в запросе linq? (я пытаюсь показать пользователю что-то вроде этого шаблона каждого сообщения на странице по умолчанию)

это то, что я хочу показать пользователям по умолчанию. (список этого)

somethisng like this

спросил(а) 2018-02-01T21:46:00+03:00 3 года, 5 месяцев назад
1
Решение
119

Если ваш класс Post является классом сущности, вам не нужно создавать другой анонимный тип с помощью select. Ниже Linq цепь должна работать на то, чего вы пытаетесь достичь. Также в соответствии с комментариями - нецелесообразно возвращать null для списка, вызывающий может проверить свойство Count, чтобы увидеть, пуст ли список.

        using (var context = new MJBweblogContext())
{
return context.Posts.Where(post => post.Published)
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.ToList();
}

ответил(а) 2018-02-01T22:43:00+03:00 3 года, 5 месяцев назад
45

Вы не можете просто пропустить все это?

List<Post> IBlogRepository.PostsForList(int pageNo, int pageSize)
{
using (var context = new MJBweblogContext())
{
return context.Posts.Where(a => a.Published == true)
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.ToList();
}
}

если вы не получаете информацию о своей категории, вы должны иметь возможность использовать INCLUDE

List<Post> IBlogRepository.PostsForList(int pageNo, int pageSize)
{
using (var context = new MJBweblogContext())
{
return context.Posts.Include("Category").Where(a => a.Published == true)
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.ToList();
}
}

ответил(а) 2018-02-01T22:50:00+03:00 3 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема