Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Запрос на LINQ к DataTable на C# / 7 сообщений из 7, страница 1 из 1
24.09.2021, 14:59
    #40099758
mikka sikorsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на LINQ к DataTable на C#
Приветствую!
Уважаемые знатоки LINQ, помогите с запросом.
Есть DataTable на C#, в ней содержится информация по тестированию.
На один тест может приходиться до 30 вопросов и на каждый вопрос до 7 ответов.
Нужен запрос, отображающий сколько в данное время в таблице содержится ответов по каждому вопросу в каждом тесте. Думаю, что на выходе нужно получить что-то типа массива с элементами типа [{5, 4}, {7, 4} ], где первый элемент содержит Id вопроса 5, которому даны 4 ответа, второй элемент содержит Id ответа 7, которому даны 4 ответов. Id выбранного теста в данное время известно - 5.
Пример таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
TestId	QuestionId  AnswerId
   5	    5	       5
   5	    5	       6
   5	    5	       7
   5	    5	       8
   5	    7	       10
   5	    7	       11
   5	    7	       12
   5	    7	       13
...
Рейтинг: 0 / 0
24.09.2021, 15:11
    #40099768
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на LINQ к DataTable на C#
в чём проблема сделать группировку по тесту и вопросам и подсчитать кол-во ответов?
...
Рейтинг: 0 / 0
24.09.2021, 15:50
    #40099790
mikka sikorsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на LINQ к DataTable на C#
Konst_One, я не силён в LINQ, такого раньше не делал.
На MS SQL всё просто:
Код: sql
1.
2.
3.
4.
select QuestionId, count(AnswerId)
from table
where TestId = @TestId
group by QuestionId


А какой синтаксис на LINQ я не знаю.
Поэтому прошу помощи для примера на будущее. Спасибо
...
Рейтинг: 0 / 0
24.09.2021, 16:06
    #40099805
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на LINQ к DataTable на C#
...
Рейтинг: 0 / 0
27.09.2021, 21:39
    #40100340
mikka sikorsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на LINQ к DataTable на C#
Попробовал сделать простенький запрос. На основе https://docs.microsoft.com/ru-ru/dotnet/framework/data/adonet/creating-a-datatable-from-a-query-linq-to-dataset

IEnumerable<DataRow> query =
from testid in table.AsEnumerable()
where testid.Field<int>("TestId") == 5
select testid;

DataTable boundTable = query.CopyToDataTable<DataRow>();

падает с System.InvalidCastException: "Заданное приведение является недопустимым."
Не нравится testid.Field<int>("TestId")
Как быть?
...
Рейтинг: 0 / 0
27.09.2021, 21:45
    #40100341
mikka sikorsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на LINQ к DataTable на C#
Сработало! Заменил int на decimal
...
Рейтинг: 0 / 0
27.09.2021, 23:23
    #40100353
mikka sikorsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на LINQ к DataTable на C#
Конечный результат:

var query =
from test in table.AsEnumerable()
where test.Field<decimal>("TestId") == 5
group test by test.Field<decimal>("QuestionId") into g
select new { Question = g.Key, AnswerCount = g.Count() };
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Запрос на LINQ к DataTable на C# / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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