Как написать этот запрос cross apply в LINQ-to-SQL?
У меня есть следующие таблицы:
create table TableA (
Id int primary key identity,
Key int not null
)
create table TableB (
Id int primary key identity,
TableA_Id int not null foreign key references TableA(Id),
Value varchar(80) not null
)
Я хотел бы написать следующий запрос в LINQ-to-SQL с использованием лямбда-нотации:
select TableA.Key, b.Value
from TableA
cross apply (
select top 10 TableB.Value
from TableB
where TableA.Id = TableB.TableA_Id
order by TableB.Value
) b
where TableA.Key between 0 and 999
Как мне это сделать?
Ответы
Ответ 1
Это должно сделать трюк
var query = from a in context.TableA
from b in context.TableB
.Where(x => x.TableA_Id == a.Id)
.OrderBy(x => x.Value)
.Take(10)
where a.Key >= 0 && a.Key <= 999
select new
{
a.Key,
b.Value,
};
Ответ 2
//получать последние сведения о деятельности для каждого пользователя
var query = ActivityRepository.Where(p => p.iAction > -1 &&
userIds.Contains(p.iSellerId)).GroupBy(c => c.iSellerId).Select(c => c.OrderByDescending(cc => cc.dBeginTime).First()).Select(a => new ActivityInfo
{
ActivityId = a.iActivityId,
StartTime = a.dBeginTime,
SellerId = a.iSellerId,
EndTime = a.dEndTime,
ActivityName = a.sName,
});
этот код будет генерировать внешний прикладной ситакс.