powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq To SQL пейджинг вложенного массива объектов
7 сообщений из 7, страница 1 из 1
Linq To SQL пейджинг вложенного массива объектов
    #36849389
Alex_BBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица Вопросов связана с таблицей Комментариев. У каждого Вопроса может быть много Комментариев:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class Comment
{
    public int QuestionId;
    public string Text;
}

public class Question
{
    public int Id;
    public List<Comment> Comments;
}

Задача с помощью LinqToSQL вытащить такой Вопрос у которого ID равен 1. При этом полученный объект должен содержать только 3 первых комментария.

Что-то типа такого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
using (DataBaseDataContext dataContext = new DataBaseDataContext(_connectionString))
{
    DataLoadOptions options = new DataLoadOptions();
    options.LoadWith<Question>(item => item.Comments.Take(3)); // Здесь ошибка исполнения
    dataContext.LoadOptions = options;

    Question question = dataContext.Question.FirstOrDefault(qq => qq.Id == 1);
}

Такое возможно сделать одним запросом?
...
Рейтинг: 0 / 0
Linq To SQL пейджинг вложенного массива объектов
    #36849809
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие-то странные у Вас классы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
[SRC c#]public class Comment
{
    public Question Question; // ?
    public string Text;
}

public class Question
{
    public int Id;
    public List<Comment> Comments;
}
[/src]
P.S. Покажите скрипт таблиц.
P.S2. Вот это работает без проблем:

code
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var question = new Question
{
    Id = 1,
    Comments = new List<Comment>(new Comment[]
    {
        new Comment{ QuestionId = 1, Text = "1" },
        new Comment{ QuestionId = 1, Text = "2" },
        new Comment{ QuestionId = 1, Text = "3" },
        new Comment{ QuestionId = 1, Text = "4" },
        new Comment{ QuestionId = 1, Text = "5" },
    })
};

var comments = question.Comments.Take(3);
...
Рейтинг: 0 / 0
Linq To SQL пейджинг вложенного массива объектов
    #36850391
Alex_BBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУКакие-то странные у Вас классы:

Код: plaintext
1.
2.
3.
4.
5.
public class Comment
{
    public Question Question; // ?
    public string Text;
}

Код: plaintext
1.
2.
3.
4.
5.
public class Comment
{
    public int QuestionID; // ?
    public string Text;
}


МСУ
P.S2. Вот это работает без проблем:

+
code
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var question = new Question
{
    Id = 1,
    Comments = new List<Comment>(new Comment[]
    {
        new Comment{ QuestionId = 1, Text = "1" },
        new Comment{ QuestionId = 1, Text = "2" },
        new Comment{ QuestionId = 1, Text = "3" },
        new Comment{ QuestionId = 1, Text = "4" },
        new Comment{ QuestionId = 1, Text = "5" },
    })
};

var comments = question.Comments.Take(3);

это-то понятно. А нужно в итоге получить объект Question у которого List<Comment> Comments будет содержать 3 первых комментария.

Это можно сделать так:
Код: plaintext
1.
2.
var question = questions.FirstOrDefault(qq => qq.Id == 1);
if(question != null)
    question.Comments = question.Comments.Take(3);

А одним запросом?
...
Рейтинг: 0 / 0
Linq To SQL пейджинг вложенного массива объектов
    #36850464
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_BBBА одним запросом?

Код: plaintext
var comments = questions.Where(d => d.Id == 1).Select(d => d.Comments).Take(3);

?
...
Рейтинг: 0 / 0
Linq To SQL пейджинг вложенного массива объектов
    #36850483
Alex_BBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, да вы показали одни запрос, но возвращает он коллекцию комментариев, а нужно вернуть объект Question (у которого поле Comments будет содержать нужные комментарии).
...
Рейтинг: 0 / 0
Linq To SQL пейджинг вложенного массива объектов
    #36850527
Alex_BBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как (напоминаю что вопрос был про Linq To Sql)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
using (DataBaseDataContext dataContext = new DataBaseDataContext(_connectionString))
{
    DataLoadOptions options = new DataLoadOptions();
    options.LoadWith<Question>(item => item.Comments);
>>    options.AssociateWith<Question>(item => item.Comments.Take(3); <<
    dataContext.LoadOptions = options;

    Question question = dataContext.Question.FirstOrDefault(qq => qq.Id == 1);
}
...
Рейтинг: 0 / 0
Linq To SQL пейджинг вложенного массива объектов
    #36850550
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_BBBМСУ, да вы показали одни запрос, но возвращает он коллекцию комментариев, а нужно вернуть объект Question (у которого поле Comments будет содержать нужные комментарии).
Тогда одним запросом эту задачу не решить.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq To SQL пейджинг вложенного массива объектов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]