Комплексная группа в C # - PullRequest
0 голосов
/ 31 мая 2019

У меня есть набор строк, как показано ниже в БД

ID,CompName,identifier,DesId,SubId,SRO,PDiam
-----------------------------------------------
1,resistor,R1,10,20,30,45
2,resistor,R2,10,20,40,50
3,capacitor,C1,10,20,33,5
4,Inductor,I1,10,20,22,32
1,Inductor,I2,10,20,42,52

Я пытаюсь сгруппировать их и выполнить siplay на основе их идентификатора следующим образом.Предположим, что разделитель столбцов - это pipe (|)

Ids|CompName|SRO|PDiam
-------------------------------
R1,R2|resistor|30|45  //Since there are two resistors, 2 rows foreach SRO and Pdiam Pair
R1,R2|resistor|40|50  
C1|Capacitor|33|5 //One Row for Capacitor as only 1 component in DB and one pair of SRO and Pdiam Pair
I1,I2|Inductor|22|32 //2 Rows for 2 capacitors and 1 row for each pair of SRO and PDiam
I1,I2|Inductor|42|52

Я знаю, что мы должны использовать group by, но не уверен, как это сделать эффективно.Единственный способ, которым я мог придумать, - это перебрать результаты Group by ComponentName и Identifier, но это кажется мне слишком сложной логикой.

Есть ли лучший способ добиться этого?

1 Ответ

0 голосов
/ 31 мая 2019

Вы можете сделать соединение своей таблицы с агрегированной версией вашей таблицы. Агрегированная таблица будет группироваться по CompName и использовать функцию агрегирования строк в Идентификаторе.

SELECT G.Ids, T.compname, T.SRO, T.PDiam FROM
components T LEFT JOIN
(SELECT compname, STRING_AGG(identifier, ',') ids FROM components GROUP BY compname) G
ON T.compname = G.compname

(не тестировалось)

Однако агрегирование строк в T-SQL до SqlServer 2017 было проблематичным, поэтому это может быть затруднительно. Смотрите этот пост

Если вам нужно сделать это в EF, подход будет таким же. Не уверен, что вы можете «экспортировать» функцию агрегирования строк в EF. (должно быть возможно).

Для небольших данных в EF вы можете использовать что-то вроде this

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...