Как мне написать этот перекрестный запрос в LINQ-to-SQL? - PullRequest
17 голосов
/ 20 марта 2012

У меня есть следующие таблицы:

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

Как мне это сделать

Ответы [ 2 ]

26 голосов
/ 20 марта 2012

Это должно сработать

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,
            };
0 голосов
/ 13 января 2014

// получить информацию о последней активности для каждого пользователя

 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,
        });

этот код будет генерировать синтаксис внешнего применения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...