powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / сломал голову с linq
10 сообщений из 35, страница 2 из 2
сломал голову с linq
    #36889990
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой зеленыйскриптов нетПлохо
Вот допустим Вам тут посоветуют какое-то решение
Как Вы его проверите?
Или вставите в свой исходник не проверяя?

И самое главное - тот, кот Вам что-то посоветует - как он проверит перед тем как советовать?
------------------------------------------------------------------------------------------------
По теме - рекомендую обратиться в форум Проектирование БД
А потом, уже с готовой моделью БД - сюда
...
Рейтинг: 0 / 0
сломал голову с linq
    #36890000
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой, извините, я не увидел, что Вы там уже были
рекомендую выложить туда Вашу схему
...
Рейтинг: 0 / 0
сломал голову с linq
    #36890013
Паганель,
Это рабочий сайт. База уже давно заполнена. Была добавлена только таблица ContentPagesForRoles. Переделать базу невозможно.
...
Рейтинг: 0 / 0
сломал голову с linq
    #36890068
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам уже посоветовали запрос
Чем он Вас не устраивает?
...
Рейтинг: 0 / 0
сломал голову с linq
    #36890080
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно, взорви себе моск.
...
Рейтинг: 0 / 0
сломал голову с linq
    #36890081
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой зеленыйДайте мне гранату ...
Правильно, взорви себе моск
...
Рейтинг: 0 / 0
сломал голову с linq
    #36890112
Паганель,

Пробую его. Ошибка - неправильный синтаксис около конструкции CSD
...
Рейтинг: 0 / 0
сломал голову с linq
    #36890180
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодой зеленыйОшибка - неправильный синтаксис около конструкции CSDНу забыли запятую в select-листе, ну с кем не бывает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
use tempdb
go
create table ContentPagesForRoles(RoleId int, ContentPageId int)
create table ContentPages(Id int, ContentSubDivisionId int, Name nvarchar( 10 ))
create table ContentSubDivision(Id int, ContentDivisionId int, Name nvarchar( 10 ))
create table ContentDivisions(Id int, Name nvarchar( 10 ))
go
-- test data
insert into ContentPagesForRoles(RoleId, ContentPageId) values( 11 ,  30 )
insert into ContentPages(Id, ContentSubDivisionId, Name) values( 30 ,  20 , 'P30')
insert into ContentSubDivision(Id, ContentDivisionId, Name) values( 20 ,  10 , 'SD20')
insert into ContentDivisions(Id, Name) values( 10 , 'D10')
-- end of test data
go
SELECT
    CP.Name as ContentPage,
    CSD.Name as ContentSubDivision,
    CD.Name as ContentDivisions
FROM [ContentPages] CP
INNER JOIN [ContentPagesForRoles] CPFR ON CPFR.ContentPageId = CP.Id
INNER JOIN [ContentSubDivision] CSD ON CSD.Id = CP.ContentSubDivisionId
INNER JOIN [ContentDivisions] CD ON CD.Id = CSD.ContentDivisionId
WHERE CPFR.RoleId =  11 
go
drop table ContentPages
drop table ContentPagesForRoles
drop table ContentSubDivision
drop table ContentDivisions
go

ContentPage ContentSubDivision ContentDivisions
----------- ------------------ ----------------
P30         SD20               D10

( 1  row(s) affected)
...
Рейтинг: 0 / 0
сломал голову с linq
    #36894974
Паганель,
спасибо.
...
Рейтинг: 0 / 0
сломал голову с linq
    #36909625
Вот снова прошу помощи - сделал как помогли. Но на сайте это коряво. Оформил как только смог. Прошу - помогите.Я изучаю линк и скул но времени очень мало и нужно перестроить мышление. Аэто время нужно.
Зделал пример с помощью классов имитирую базу данных
классы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
    public class LocalDivision // это раздел
    {
        public int Id { get; set; }
        public List<LocalSubdivision> LocalSubdivisions { get; set; } // это дочерние подразделы
        public string Name { get; set; }
    }

    public class LocalSubdivision // это подраздел
    {
        public int Id { get; set; }
        public int LocalDivisionId { get; set; } // это обратная ссылка
        public List<LocalPage> LocalPages { get; set; } // это список страниц
        public string Name { get; set; }

    }

    public class LocalPage// это страница
    {
        public int Id { get; set; }
        public int LocalSubdivisionId { get; set; }
        public string Name { get; set; }
    }


    public class LocalPagesForRoles // это как таблица где страница разрешена для роли
    {
        public int LocalPageId { get; set; }
        public int RoleId { get; set; }
    }


    public class LocalRole // это я имитирую роли для пользователя
    {
        public string RoleName { get; set; }
        public int RoleId { get; set; }
    }

Тут вручную строю объекты в Page_Load
объекты
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
// это дерево разделов
            var divisions = new List<LocalDivision>()
            {
                new LocalDivision()
                {
                    Id=1,
                    Name="Глобальный Раздел №1",
                    LocalSubdivisions=new List<LocalSubdivision>()
                    {
                        new LocalSubdivision()
                        {
                            Id=1,
                            LocalDivisionId=1,
                            Name="Подраздел 1-1",
                            LocalPages= new List<LocalPage>()
                            {
                                new LocalPage()
                                {
                                    Id=1,
                                    LocalSubdivisionId=1,
                                    Name="Страница 1-1-1 Все смотрят"
                                },
                                new LocalPage()
                                {
                                    Id=2,
                                    LocalSubdivisionId=1,
                                    Name="Страница 1-1-2 Менеджер"
                                }
                            }
                        },
                        new LocalSubdivision()
                        {
                            Id=2,
                            LocalDivisionId=1,
                            Name="Подраздел 1-2",
                            LocalPages= new List<LocalPage>()
                            {
                                new LocalPage()
                                {
                                    Id=3,
                                    LocalSubdivisionId=2,
                                    Name="Страница 1-2-1 Админ"
                                }
                            }
                        }
                    }
                },
                new LocalDivision()
                {
                    Id=2,
                    Name="Глобальный Раздел №2",
                    LocalSubdivisions=new List<LocalSubdivision>()
                    {
                        new LocalSubdivision()
                        {
                            Id=3,
                            LocalDivisionId=2,
                            Name="Подраздел 2-1",
                            LocalPages= new List<LocalPage>()
                            {
                                new LocalPage()
                                {
                                    Id=5,
                                    LocalSubdivisionId=3,
                                    Name="Страница 2-1-1 Только Пользователь"
                                },
                                new LocalPage()
                                {
                                    Id=6,
                                    LocalSubdivisionId=3,
                                    Name="Страница 2-1-2 Все смотрят"
                                }
                            }
                        },
                        new LocalSubdivision()
                        {
                            Id=4,
                            LocalDivisionId=1,
                            Name="Подраздел 2-2",
                            LocalPages= new List<LocalPage>()
                            {
                                new LocalPage()
                                {
                                    Id=7,
                                    LocalSubdivisionId=4,
                                    Name="Страница 2-2-1 Менеджер и Админ"
                                },
                                new LocalPage()
                                {
                                    Id=8,
                                    LocalSubdivisionId=4,
                                    Name="Страница 2-2-2 Только Менеджер"
                                }
                            }
                        }
                    }
                },
                new LocalDivision()
                {
                    Id=3,
                    Name="Третий Глобальный Раздел",
                    LocalSubdivisions=new List<LocalSubdivision>()
                    {
                        new LocalSubdivision()
                        {
                            Id=5,
                            LocalDivisionId=3,
                            Name="Подраздел 3-1",
                            LocalPages= new List<LocalPage>()
                            {
                                new LocalPage()
                                {
                                    Id=9,
                                    LocalSubdivisionId=5,
                                    Name="Страница 3-1-1 Менеджер и Админ"
                                },
                                new LocalPage()
                                {
                                    Id=10,
                                    LocalSubdivisionId=5,
                                    Name="Страница 3-1-2 Только Админ"
                                },
                                new LocalPage()
                                {
                                    Id=11,
                                    LocalSubdivisionId=5,
                                    Name="Страница 3-1-3 Только Админ"
                                }
                            }
                        }
                    }
                }
            };

            // пользователи которые могут иметь разные роли
            var user1 = new List<LocalRole>()
            {
                new LocalRole() { RoleId = 3, RoleName="Пользователь" }
            };

            var user2 = new List<LocalRole>()
            {
                new LocalRole() { RoleId = 2, RoleName="Менеджер" },
                new LocalRole() { RoleId = 3, RoleName="Пользователь" }
            };

            var user3 = new List<LocalRole>()
            {
                new LocalRole() { RoleId = 1, RoleName="Админ" },
            };

            // это как таблица страница разрешена для роли
            var localPagesForRoles = new List<LocalPagesForRoles>()
            {
                new LocalPagesForRoles() { LocalPageId = 1, RoleId = 1},
                new LocalPagesForRoles() { LocalPageId = 1, RoleId = 2},
                new LocalPagesForRoles() { LocalPageId = 1, RoleId = 3},

                new LocalPagesForRoles() { LocalPageId = 2, RoleId = 2},

                new LocalPagesForRoles() { LocalPageId = 3, RoleId = 1},

                new LocalPagesForRoles() { LocalPageId = 5, RoleId = 3},

                new LocalPagesForRoles() { LocalPageId = 6, RoleId = 1},
                new LocalPagesForRoles() { LocalPageId = 6, RoleId = 2},
                new LocalPagesForRoles() { LocalPageId = 6, RoleId = 3},

                new LocalPagesForRoles() { LocalPageId = 7, RoleId = 1},
                new LocalPagesForRoles() { LocalPageId = 7, RoleId = 2},

                new LocalPagesForRoles() { LocalPageId = 8, RoleId = 2},

                new LocalPagesForRoles() { LocalPageId = 9, RoleId = 1},
                new LocalPagesForRoles() { LocalPageId = 9, RoleId = 2},

                new LocalPagesForRoles() { LocalPageId = 10, RoleId = 1},
                new LocalPagesForRoles() { LocalPageId = 11, RoleId = 1}
            };

Это тоже в педж лоуд - вывожу на странцу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
// это какбы запрос к базе
                       var menu = from lpfr in localPagesForRoles
                       from u in user3 // здесь нужно подставлять разных пользователей для проверки работы
                       where lpfr.RoleId == u.RoleId

                       from d in divisions

                       select new LocalDivision
                       {
                           Name = d.Name,
                           LocalSubdivisions = (from s in d.LocalSubdivisions
                                                where d.Id == s.LocalDivisionId
                                                select new LocalSubdivision()
                                                {
                                                    Id = s.Id,
                                                    LocalDivisionId = s.LocalDivisionId,
                                                    Name = s.Name,
                                                    LocalPages = (from p in s.LocalPages
                                                                  where p.LocalSubdivisionId == s.Id && p.Id == lpfr.LocalPageId
                                                                  select new LocalPage()
                                                                  {
                                                                      Name = p.Name,
                                                                      Id = p.Id,
                                                                      LocalSubdivisionId = p.LocalSubdivisionId

                                                                  }).ToList<LocalPage>()
                                                }).ToList<LocalSubdivision>()

                       };
            // это вывод на страницу
            foreach(var d in menu)
            {
                Label1.Text += string.Format("<b>{0}</b><br />", d.Name);
                foreach(var s in d.LocalSubdivisions)
                {
                    Label1.Text += string.Format("   {0}<br />", s.Name);
                    foreach(var p in s.LocalPages)
                    {
                        Label1.Text += string.Format("      <span style=\"color:navy;\">{0}</span><br />", p.Name);

                    }
                }
            }


сама стрница
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Tests.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server"></asp:Label>
    </div>
    </form>
</body>
</html>

Страницы выводятся правильно. Но вылезают и повторяются пустые разделы и подразделы. Как это убрать?
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / сломал голову с linq
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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