Re: Как такое переписать на linq
От: IT Россия linq2db.com
Дата: 24.09.10 16:16
Оценка: 14 (2)
Здравствуйте, LF, Вы писали:

LF>есть такой запрос (вытаскивает все записи с информацией о последнем событии об этой записи):

LF>
LF>select * from 
LF>    dbo.record as r 
LF>inner join 
LF>    dbo.history as h 
LF>    on r.id = h.record_id
LF>inner join
LF>    (
LF>        select 
LF>            h2.record_id, 
LF>            max([date_time]) as [date_time] 
LF>        from 
LF>            dbo.history as h2
LF>        group by 
LF>            h2.record_id
LF>    ) as temp
LF>    on h.record_id = temp.record_id
LF>    and h.date_time = temp.date_time
LF>


from r in record
join h in history on r.id = h.record_id
join temp in
    from h2 in history
    group h2 by h2.Record_id into gr
    select new
    {
        RecordID = gr.Key,
        DateTime = gr.Max(_ => _.date_time)
    }
on new { on h.record_id, h.date_time } equals new { temp.record_id, temp.date_time }
select new { r, h, temp }
Если нам не помогут, то мы тоже никого не пощадим.
Как такое переписать на linq
От: LF  
Дата: 24.09.10 10:14
Оценка:
есть такой запрос (вытаскивает все записи с информацией о последнем событии об этой записи):
select * from 
    dbo.record as r 
inner join 
    dbo.history as h 
    on r.id = h.record_id
inner join
    (
        select 
            h2.record_id, 
            max([date_time]) as [date_time] 
        from 
            dbo.history as h2
        group by 
            h2.record_id
    ) as temp
    on h.record_id = temp.record_id
    and h.date_time = temp.date_time

Таблицы:
  Скрытый текст
create table [dbo].[record]
(
id int identity(1,1) not null,
issued_money decimal not null,
received_money decimal null,
receiver nvarchar(256) not null,
[object_id] int not null
)
go

alter table [dbo].[record] add constraint [record_pk] primary key (id)
go

alter table [dbo].[record] add constraint [fk_record_object_id]
foreign key([object_id]) references [dbo].[object] ([id])
go
create table [dbo].[history]
(
id int identity(1,1) not null,
[date_time] datetime not null,
comment ntext not null,
record_id int not null,
[user_id] int not null,
[action_id] int not null
)
go

alter table [dbo].[history] add constraint [history_pk] primary key (id)
go

alter table [dbo].[history] add constraint [fk_history_record_id]
foreign key([record_id]) references [dbo].[record] ([id])
go
alter table [dbo].[history] add constraint [fk_history_user_id]
foreign key([user_id]) references [dbo].[user] ([id])
go
alter table [dbo].[history] add constraint [fk_history_action_id]
foreign key([action_id]) references [dbo].[action] ([id])
go

alter table [dbo].[history] add constraint [df_history_comment] default ('') for [comment]
go

Как такой запрос переписать на linq? Спасибо.

И вопрос общего характера:
запросы, которые не укладываются в linq, как лучше оформлять: через хранимую процедуру или в виде plain sql в коде программы?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.