2012-03-20 8 views
14

tengo las siguientes tablas:¿Cómo escribo esta consulta de aplicación cruzada en 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 
) 

me gustaría escribir la siguiente consulta en LINQ to SQL usando la notación lambda:

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 

¿Cómo voy a hacer esto?

Respuesta

19

Esto debería hacer el truco

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

// obtener información más reciente sobre la actividad de cada usuario

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

este código generará exterior aplica sytax.

Cuestiones relacionadas