2012-03-20 12 views
14

mam poniższych tabelach:Jak napisać ten krzyżyk zastosuj zapytanie w LINQ-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 
) 

chciałbym napisać następującą kwerendę w LINQ-SQL przy użyciu notacji 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 

Jak to zrobić?

Odpowiedz

19

To powinno załatwić sprawę

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

// uzyskać najnowsze informacje aktywności dla każdego użytkownika

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

ten kod wygeneruje zewnętrzna stosuje sytax.

Powiązane problemy