Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / entity framework запрос / 25 сообщений из 26, страница 1 из 2
20.07.2018, 08:58
    #39676602
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
нужен совет

есть две таблицы
мастер-деталь 1-м
Нужен запрос (с пейджингом)
все строки мастера, где есть дочерние строки в детали по определенному условию

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Master(masterid int, masterName varchar(100))
Detail(DetailId int, masterId int, DetailValue int)

условный запрос в mssql

select top 100 *
 from(
   select top 10000 * from master m
    where m.masterid in
       (select masterid from detail where value in (:p_1, :p_2, :p_3)
   order by 1
   )
 order by 1 desc



Модератор: Тема перенесена из форума "ASP.NET".
...
Рейтинг: 0 / 0
20.07.2018, 09:01
    #39676603
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
как это будет выглядеть в Entity ASP net core 2
...
Рейтинг: 0 / 0
20.07.2018, 09:04
    #39676605
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class Master
 {
 public int masterid  { get; set; }
 public string masterName { get; set; }
 }

public class Detail
 {
 public int DetailId  { get; set; }
 public int masterid  { get; set; }
 public int DetailValue { get; set; }
 }
...
Рейтинг: 0 / 0
20.07.2018, 09:50
    #39676628
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
andreymxEntity ASP net core 2Ты уж у себя в голове постарайся отделить ASP.NET от EntityFramework, а то так и будешь в трех соснах блуждать. Это несвязанные между собой вещи
...
Рейтинг: 0 / 0
20.07.2018, 09:52
    #39676630
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
andreymxвсе строки мастера, где есть дочерние строки в детали по определенному условиючем тебя не устраивает совершенно обычный join? зачем городишь трехуровневый запрос?
...
Рейтинг: 0 / 0
20.07.2018, 10:38
    #39676686
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
Shocker.Proandreymxвсе строки мастера, где есть дочерние строки в детали по определенному условиючем тебя не устраивает совершенно обычный join? зачем городишь трехуровневый запрос?1-м + paging + left join
...
Рейтинг: 0 / 0
20.07.2018, 11:37
    #39676753
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
andreymxShocker.Proпропущено...
чем тебя не устраивает совершенно обычный join? зачем городишь трехуровневый запрос?1-м + paging + left join+ distinct для 1-m
...
Рейтинг: 0 / 0
20.07.2018, 11:59
    #39676784
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
Если нужно отбирать только строки из мастера, то distinct и пейджинг можно делать на верхнем уровне
...
Рейтинг: 0 / 0
20.07.2018, 12:03
    #39676790
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
andreymxandreymxпропущено...
1-м + paging + left join+ distinct для 1-m
Имхо не нужен. ОРМ вроде left по умолчанию.
...
Рейтинг: 0 / 0
20.07.2018, 12:20
    #39676803
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
Shocker.ProЕсли нужно отбирать только строки из мастера, то distinct и пейджинг можно делать на верхнем уровнене хочется тянуть на клиента 400 тыш строк, чтобы из них дистинктом получить триста тыщ и отбирать первые пятьдесят строк
...
Рейтинг: 0 / 0
20.07.2018, 12:22
    #39676809
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
Я не говорил про тянуть на клиента. Я пока задачу не понимаю, что там за два топа и почему его нельзя выбрать в виде плоского запроса и сгруппировать
...
Рейтинг: 0 / 0
20.07.2018, 12:30
    #39676817
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
andreymx,
Дай запрос с join сюда вместо подзапроса.
...
Рейтинг: 0 / 0
23.07.2018, 16:56
    #39677803
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
вот тестовая БД на коленке
Код: 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.
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.
use test;

drop  table acc_operations;
drop  table acc_operation_code;
drop  table operation;
drop  table main;
go

create table dbo.main
(
main_id int,
name varchar(500),
department_id	int not null,
constraint pk_main primary key(main_id)
);

create table dbo.operation
(
operation_id int identity(1,1),
main_id int not null,
acc_operation_code int not null,
operation_date datetime not null,
name varchar(500),
constraint pk_operation primary key(operation_id),
constraint fk_operation foreign key(main_id) references main
);

create table dbo.acc_operation_code
(
acc_operation_code int not null,
acc_operation_name varchar(500) not null,
constraint pk_acc_operation_code primary key(acc_operation_code)
);

create table dbo.acc_operations
(
acc_operation_id int,
acc_operation_code int not null,
acc_operation_feature int not null,
acc_operation_actuality_from datetime not null,
acc_operation_actuality_to   datetime not null,
name varchar(500),
constraint pk_acc_operation primary key(acc_operation_id),
constraint fk_acc_operation foreign key(acc_operation_code) references acc_operation_code
);


insert into dbo.acc_operation_code
(
acc_operation_code,
acc_operation_name
)
select 1, 'operation code 1' union all
select 2, 'operation code 2' union all
select 3, 'operation code 3' 


insert into dbo.acc_operations
(
acc_operation_id ,
acc_operation_code,
acc_operation_feature ,
acc_operation_actuality_from ,
acc_operation_actuality_to
)
select 1, 1, 1, {ts '2017-01-01 00:00:00'}, {ts '2017-12-31 23:59:59'} union all
select 2, 1, 0, {ts '2018-01-01 00:00:00'}, {ts '2018-12-31 23:59:59'} union all
select 3, 2, 1, {ts '2017-01-01 00:00:00'}, {ts '2017-12-31 23:59:59'} union all
select 4, 2, 0, {ts '2018-01-01 00:00:00'}, {ts '2018-12-31 23:59:59'} union all
select 5, 3, 0, {ts '2017-01-01 00:00:00'}, {ts '2018-12-31 23:59:59'}




;with main1(id) as
(
select 1 id
union all
select id+1 from  main1 where id < 32767
)
insert into main(main_id, name, department_id)
select id, cast(id as varchar(100))+'-'+cast(id as varchar(100))+'-'+cast(id as varchar(100))+'-'+cast(id as varchar(100))+'-'+cast(id as varchar(100))+'-'+cast(id as varchar(100)),
       id / 1000
  from main1
option (maxrecursion 32767)

insert into main(main_id, name, department_id)
select main_id+32768, name+'-32768', department_id from main;

insert into main(main_id, name, department_id)
select main_id+65536, name+'-65536', department_id from main;


---select * from main;

insert into dbo.operation
(
main_id,
acc_operation_code,
operation_date,
name)

select --top 100
       main.main_id,
	   acc_operation_code,
	   dateadd(hour, main.main_id/6, {ts '2017-01-01 00:00:00'}),
	   cast(main.main_id as varchar(100))+ '='+cast(acc_operation_code as varchar(100))
 from main join (select 1 main_id, 1 acc_operation_code  union select 2 id, 2 union select 3 id, 3) o on 1=1

 go


запрос через подзапрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
declare @department_id int = 11;
declare @acc_operation_feature int = 1;

select *
from(
select dbo.main.*,
       row_number() over(order by name) rn
  from dbo.main
where main_id in(
  select main_id
   from dbo.operation op --on op.main_id = main.main_id
  left join acc_operation_code code on code.acc_operation_code = op.acc_operation_code
  left join acc_operations ops on ops.acc_operation_code = op.acc_operation_code
                           and op.operation_date between acc_operation_actuality_from and acc_operation_actuality_to
 where (@department_id is null or main.department_id = @department_id)
   and (@acc_operation_feature is null or ops.acc_operation_feature = @acc_operation_feature)
 )
) subq 
 where rn >= 1000
   and rn < 1500



запрос с джойнами
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
declare @department_id int = 11;
declare @acc_operation_feature int = 1;

select subq.*
from(
select subq.*, row_number() over(order by name) rn
from(
select distinct
       dbo.main.*
  from dbo.main
  left join dbo.operation op on op.main_id = main.main_id
  left join acc_operation_code code on code.acc_operation_code = op.acc_operation_code
  left join acc_operations ops on ops.acc_operation_code = op.acc_operation_code
                           and op.operation_date between acc_operation_actuality_from and acc_operation_actuality_to

 where (@department_id is null or main.department_id = @department_id)
   and (@acc_operation_feature is null or ops.acc_operation_feature = @acc_operation_feature)
) subq
) subq
where rn >= 1000
   and rn < 1500

...
Рейтинг: 0 / 0
23.07.2018, 18:43
    #39677884
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
Модель построю завтра, нет компа под рукой
...
Рейтинг: 0 / 0
23.07.2018, 19:17
    #39677902
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
andreymxМодель построю завтра, нет компа под рукой
Не надо модель.
Второй запрос у тебя тоже с подзапросом.
Ты или делай простой пример один ко многим или делай запросы на sql минуя 95 процентов EF.
Т.е. получение объектов и сохранение их.
...
Рейтинг: 0 / 0
23.07.2018, 19:24
    #39677903
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
Petro123andreymxМодель построю завтра, нет компа под рукой
Не надо модель.
Второй запрос у тебя тоже с подзапросом.
Ты или делай простой пример один ко многим или делай запросы на sql минуя 95 процентов EF.
Т.е. получение объектов и сохранение их.во втором примере подзапрос чисто для пейджинга
Как делать пейджинг без подзапросов, я не знаю

Зы: как лучше делать sql запросы мимо EF? Что лучше использовать?
...
Рейтинг: 0 / 0
23.07.2018, 19:33
    #39677910
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
andreymxво втором примере подзапрос чисто для пейджинга
Если Модель и запрос простые, то показывай. Сделаем.
Если сложные, то как вариант через хранимку. Входной парам номер страницы.
Зачем тебе пагинация?
...
Рейтинг: 0 / 0
23.07.2018, 19:49
    #39677917
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
Пагинацию затребовал дизайнер

А хрпнимку как вызывать?
...
Рейтинг: 0 / 0
23.07.2018, 20:27
    #39677938
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
andreymxПагинацию затребовал дизайнеругу.
Который с фотошопом.
andreymxА хрпнимку как вызывать?
Ты не торопись. Комп будет под рукой и начинай писать).
...
Рейтинг: 0 / 0
23.07.2018, 21:32
    #39677958
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
Хотелось бы всё-таки услышать
Совет бывалых и опытных
Что использовать в дополнение к EF для выполнения запросов и процедур
...
Рейтинг: 0 / 0
23.07.2018, 22:12
    #39677966
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
andreymx,
Советов не будет.
Будет работа.
Садитесь за комп и будете делать что скажу я или другой мембер.
Ну, или ничего не делаете. Неделя уже прошла.
...
Рейтинг: 0 / 0
23.07.2018, 22:32
    #39677973
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
Petro123,

говори, прочитаю, обдумаю до завтра
...
Рейтинг: 0 / 0
23.07.2018, 22:54
    #39677975
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
andreymx,
Там все просто:
var list =Контекст.MyTable.ToList();
На этой строке F9.
Запуск.
Потом F10 и справа скажешь время сереньким.
...
Рейтинг: 0 / 0
23.07.2018, 23:19
    #39677983
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
или плюнуть и взять даппер
...
Рейтинг: 0 / 0
24.07.2018, 07:24
    #39678025
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
entity framework запрос
andreymxили плюнутькак работать понадобилось, так сразу философский вопрос - плюнуть или нет)))) LOL
....
"Жениться или не жениться, вот в чем вопрос!
А если жениться, то куда девать нынешнюю жену?" (С)
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / entity framework запрос / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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