Hi,jayaram Ответов: 1

Напишите запрос linq с помощью group by и joins


Привет команда,

У меня есть 3 таблицы (роли,RolesLink,RolesTitle)

И таблицы имеют отношение к столбцу RoleID.
В зависимости от повторяющегося столбца (если повторяющиеся значения должны быть 2 значениями) RolesLink я хочу вернуть данные в виде выходных данных, показанных ниже.


Table: Roles
RuleID	  Name	  Col3	   Col4	
1         Admin			
2         Account			
			
Table: RolesLink
ID	RoleID	DuplicateCol	Col4	Col5
1 	 1      Title_ID		
2	 2      Title_ID		
3    1      Title_Name		
				
Table: RolesTitle
ID    RoleID  TitleName	Col4	Col5
1       1     Title_1		
2       2     Title_2		
3       1     Title_3


Выход
RoleID1	RoleID2	Title1	Title2	
1       2       Title_1	Title_2	


Пожалуйста, помогите мне написать запрос LINQ (на языке C#), чтобы вернуть вышеописанный выходной результат.

Спасибо,
и jayaram

Что я уже пробовал:

Я пытался получить данные на основе group by DuplicateCol, но я не могу получить данные с titlename.

1 Ответов

Рейтинг:
2

Maciej Los

Из-за плохой структуры базы данных невозможно получить ожидаемый результат. Главная причина в том, что между ними нет никакой связи. DuplicateCol и TitleName поля. Итак, объединение данных на основе RoleID поле:

var result = (from r in Roles.AsEnumerable()
	join rl in RolesLink.AsEnumerable() on r["RoleID"] equals rl["RoleID"]
	join rt in RolesTitle.AsEnumerable()  on r["RoleID"] equals rt["RoleID"]
	select new
		{
			RoleName = r["Name"],
			DuplicateCol = rl["DuplicateCol"],
			TitleName = rt["TitleName"]
		})
	.GroupBy(x=>x.RoleName);

возвращается:
Key= Admin 
RoleName     DuplicateCol    TitleName
Admin        Title_ID        Title_1 
Admin        Title_ID        Title_3 
Admin        Title_Name      Title_1 
Admin        Title_Name      Title_3 
 
Key= Account 
RoleName    DuplicateCol    TitleName
Account     Title_ID        Title_2