Использование join и pivot в Entity Framework с C # или написать хранимую процедуру - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу создать пользовательскую объединенную таблицу и показать строки в столбцах.Я хочу получить информацию о приглашениях по умолчанию, но вместе с ответами на вопросы, которые люди дают на любое приглашение.

Мне нужны строки с вопросами и ответами в столбцах.(Я думаю, что мы должны использовать pivot, но я не уверен.)

Я не смог найти способ сделать это в ef c #, используя lambda или linq.Или я использую SQL Server 2012, поэтому, если вы дадите мне заявление SQL для этой цели, я буду очень признателен.

Вот мои таблицы.

Люди

id | name       | surname  
---+------------+------------
 1 |    carl    | sagan  
 2 |    john    | wick   
 3 |    alex    | rony   
 4 |    mary    | olsen   

Приглашение

 id | name       | peopleid  | hasquestion | isdefault  
---+-------------+-----------+-------------+-----------
 1 |    inv1     | 1         |    0        |    1
 2 |    inv2     | 1         |    1        |    0
 3 |    inv3     | 2         |    0        |    0
 4 |    inv4     | 2         |    1        |    1
 5 |    inv5     | 2         |    1        |    0
 6 |    inv6     | 3         |    1        |    1
 7 |    inv7     | 4         |    0        |    1

Вопрос

 id | text         
---+------------
 1 |    question 1    
 2 |    question 2       
 3 |    question 3        
 4 |    question 4
 5 |    question 5  

ВопросОтветы

id | invitationid | questionid  | answer
---+--------------+-------------+--------
 1 |    2         | 1           |    abc
 2 |    2         | 2           |    def
 3 |    2         | 3           |    ghi
 4 |    4         | 3           |    jkl
 5 |    4         | 4           |    mno
 6 |    5         | 1           |    prs    
 7 |    6         | 5           |    tuy    

Моя таблица результатов должна быть:

id |  peoplename     | default   | question 1  | question 2 | question 3 | question 4 | question 5  
---+-----------------+-----------+-------------+------------+------------+------------+-----------
 1 |    carl sagan   | inv1      |    abc      |    def     |   ghi      |            |   
 2 |    john wick    | inv4      |    prs      |            |   jkl      |    mno     |   
 3 |    alex rony    | inv6      |             |            |            |            |    tuy
 3 |    mary olsen   | inv7      |             |            |            |            |    

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете запустить этот скрипт, чтобы сначала создать процедуру SQL.

CREATE PROCEDURE sp_get_question_answers
AS
SELECT 
[peoplename],
[invitation],
[question 1],
[question 2],
[question 3],
[question 4],
[question 5]
FROM 
(SELECT 
p.[name] + ' ' + p.surname AS [peoplename],
i.[name] AS invitation,
q.[text] question,
qa.answer
 FROM dbo.people p  
 INNER JOIN dbo.invitations i ON p.id = i.people_id
 INNER JOIN dbo.question_answers qa ON i.id = qa.invitation_id
 LEFT JOIN dbo.questions q ON qa.question_id = q.id)
 AS SourceTable
 PIVOT 
 (
 MAX(answer)
 FOR question  IN 
([question 1],
[question 2],
[question 3],
[question 4],
[question 5]) 
)AS PivotTable;
GO

Затем вы можете выполнить процедуру через структуру объекта. IEnumerable<QuestionAnswer> answers = dbContext.FromSql<QuestionAnswer>("Exec sp_get_question_answers");

Предполагая, что QuestionAnswer - это класс, свойства которого соответствуют свойствам, возвращаемым процедурой.

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