Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Динамические выборки / 9 сообщений из 9, страница 1 из 1
14.04.2015, 21:37
    #38936513
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические выборки
ЭстЪ набор сущностей. В худшем случае с вообще непересекающимися множествами атрибутов. Пользователь может выбирать, как в качестве критериев выборки, так и в качестве запрашиваемых любые атрибуты. Да... Это еще сортируется, ну и paging...
В общем виде это, по идее, может выглядеть ~так:
Код: sql
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.
;with cte(EntityIAttrI, EntityIAttrII, EntityIIAttrI, EntityIIAttrII)
as
(
	select
		AttrI as EntityIAttrI,
		AttrII as EntityIAttrII,
		null as EntityIIAttrI,
		null as EntityIIAttrII
	from
		EntityI
	union
	select
		null as EntityIAttrI,
		null as EntityIAttrII,
		e.AttrI as EntityIIAttrI,
		d.AttrII as EntityIIAttrII
	from
		EntityII e
		join EntityIIDetail d on d.idMaster = e.id
)
select
	EntityIAttrI,
	EntityIAttrII,
	EntityIIAttrI,
	EntityIIAttrII
from
(
	select
		row_number() over (order by EntityIAttrI, EntityIIAttrII) as RowNo,
		EntityIAttrI,
		EntityIAttrII,
		EntityIIAttrI,
		EntityIIAttrII
	from
		cte
) p
where
	RowNo between start and limit


Вот как бы это все малой кровью покультурнее запихнуть в EF? И стоит ли?
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
14.04.2015, 21:59
    #38936525
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические выборки
Ex_Soft,

у EF нет способности строить CTE запросы. либо оформляешь через вью и мапишь это вью как таблицу, а если этого мало, тогда только через хранимку и прямое дёргание её через контекст.
...
Рейтинг: 0 / 0
14.04.2015, 22:45
    #38936557
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические выборки
> у EF нет способности строить CTE запросы
Не... То ж я для примеру, так сказать гипербола ... Там, по сути cte нужен просто тупо в качестве обертки для последующего paging'а... Его ж можно внутрь всего запихнуть (просто еще один уровень select from (select...) добавится...))

> либо оформляешь через вью и мапишь это вью как таблицу
повторяюсь и акцентирую: количество сущностей, как таковых, так и множество их атрибутов (как на входе, так и в выхлопе) пользователь меняет динамически.

> а если этого мало, тогда только через хранимку и прямое дёргание её через контекст.
а что хранимка-то (учитывая сказанное выше)? DSQL + динамический выхлоп - как его мапить (динамически)?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.04.2015, 23:55
    #38936587
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические выборки
Ex_Softповторяюсь и акцентирую: количество сущностей, как таковых, так и множество их атрибутов (как на входе, так и в выхлопе) пользователь меняет динамически.

EF (как в принципе и любой ORM) предназначен для отражения реляционной структуры в объектную модель целевого языка/платформы.

что ты на выходе (на выхлопе) там хочешь получить? динамически собираемый class с разным набором пропертей, не понимаю?

задача поставлена ппц как криво, ты бы хоть результат сначала представил себе с чем ты будешь работать в итоге?

Ex_Softа что хранимка-то (учитывая сказанное выше)? DSQL + динамический выхлоп - как его мапить (динамически)?

во что мапить-то? в какую дыру? EF мапит в конкретные классы, известные на этапе компиляции , а ты чего хочешь, не понимаю? в рантайме компилить динамические классы? для каких целей?

нет, такого EF не умеет, да и ни один из имеющихся ORM не умеет, и совершенно точно в самом далёком обозримом будущем, не будет.

хочешь динамику по набору полей, значит строй SQL динамически, запихивай его в DataTable и работай с ним, зная поля в рантайме по их наименованию. только при чём тут ORM?
...
Рейтинг: 0 / 0
15.04.2015, 12:02
    #38936924
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические выборки
> задача поставлена ппц как криво, ты бы хоть результат сначала представил себе с чем ты будешь работать в итоге?

Легко


Хочу видеть все имущество по владельцам, приобретенное в определенный период (с некоторыми специфичными атрибутами)


Код: sql
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.
;with cte(Владелец, ДатаПриобретения, Наименование, ГосБортНомер, Площадь)
as
(
	select
		Владелец.Владелец as Владелец,
		НедвижимоеИмущество.ДатаПриобретения as ДатаПриобретения,
		НедвижимоеИмущество.Наименование as Наименование,
		null as ГосБортНомер,
		null as Площадь
	from
		Владелец
		join НедвижимоеИмущество on НедвижимоеИмущество.idВладелец = Владелец.id
	union
	select
		Владелец.Владелец as Владелец,
		НаземноеТС.ДатаПриобретения as ДатаПриобретения,
		НаземноеТС.Наименование as Наименование,
		НаземноеТС.ГосНомер as ГосБортНомер,
		null as Площадь
	from
		Владелец
		join НаземноеТС on НаземноеТС.idВладелец = Владелец.id
	union
	select
		Владелец.Владелец as Владелец,
		ВодноеТС.ДатаПриобретения as ДатаПриобретения,
		ВодноеТС.Наименование as Наименование,
		ВодноеТС.БортНомер as ГосБортНомер,
		null as Площадь
	from
		Владелец
		join ВодноеТС on ВодноеТС.idВладелец = Владелец.id
	union
	select
		Владелец.Владелец as Владелец,
		ВоздушноеТС.ДатаПриобретения as ДатаПриобретения,
		ВоздушноеТС.Наименование as Наименование,
		ВоздушноеТС.БортНомер as ГосБортНомер,
		null as Площадь
	from
		Владелец
		join ВоздушноеТС on ВоздушноеТС.idВладелец = Владелец.id
	union
	select
		Владелец.Владелец as Владелец,
		ЗемльныйКадастр.ДатаПриобретения as ДатаПриобретения,
		null as Наименование,
		null as ГосБортНомер,
		ЗемльныйКадастр.Площадь as Площадь
	from
		Владелец
		join ЗемльныйКадастр on ЗемльныйКадастр.idВладелец = Владелец.id
)
select
	Владелец,
	ДатаПриобретения,
	Наименование,
	ГосБортНомер,
	Площадь
from
(
	select
		row_number() over (order by Владелец, ДатаПриобретения) as RowNo,
		Владелец,
		ДатаПриобретения,
		Наименование,
		ГосБортНомер,
		Площадь
	from
		cte
) p
where
	RowNo between start and limit




И вот с этой выборкой я работаю. Что в ней кривого/криминального?

> хочешь динамику по набору полей, значит строй SQL динамически, запихивай его в DataTable и работай с ним, зная поля в рантайме по их наименованию. только при чём тут ORM?
Да, вот, хотелось как-то припахать "того парня"... + Мо, ЭстЪ еще какие-либо варианты реализации... Чем больше выбор - тем лучше ж...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.04.2015, 12:18
    #38936942
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические выборки
Ex_SoftИ вот с этой выборкой я работаю. Что в ней кривого/криминального?

т.е. ты хочешь мапить вот в это:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class МойКласс
{
     public string Владелец {get; set;}
     public DateTime ДатаПриобретения {get; set;}
     public string Наименование  {get; set;}
     public string ГосБортНомер  {get; set;}
     public string Площадь  {get; set;}
}



Правильно понял?
...
Рейтинг: 0 / 0
15.04.2015, 13:44
    #38937130
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические выборки
hVosttт.е. ты хочешь мапить вот в это:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class МойКласс
{
      public string Владелец {get; set;}
      public DateTime ДатаПриобретения {get; set;}
      public string Наименование  {get; set;}
      public string ГосБортНомер  {get; set;}
      public string Площадь  {get; set;}
}



Правильно понял?
Ну... Для конкретно приведенного желания пользователя - да. Но, вот, если ему захочется посмотреть только недвижимое и движимое имущество, по последний union - не нужен/выпадает и, соответственно, Площадь - тоже...

Но это только вершина айсберга... В этом порно фильме у каждого, к примеру, имущества - куча фоток в различных позах ракурсах... Вот их-то и мне нужно визуализировать в виде карточек... И все это должно работать в режиме реального времени - т.е. быстро...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.04.2015, 13:47
    #38937135
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические выборки
P.S.
> Ну... Для конкретно приведенного желания пользователя - да.
Т.е. пользователь может выбирать любые комбинации сущностей и их атрибутов. И пока об ограничении вариантов речь не идет. Соответственно нагенерячить классов по всем комбинациям даже не представляется возможным...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.04.2015, 15:11
    #38937273
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамические выборки
Ex_SoftСоответственно нагенерячить классов по всем комбинациям даже не представляется возможным...

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


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