2012-03-20 18 views
14

ho le seguenti tabelle:Come si scrive questa domanda incrociata in 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 
) 

vorrei scrivere la seguente query in LINQ to SQL utilizzando la notazione 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 

Come faccio a fare questo?

risposta

19

Questo dovrebbe fare il trucco

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

// ricevere le ultime informazioni di attività per ogni utente

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

questo codice genererà esterno applicare sytax.

Problemi correlati