如何在LINQ中的子查询中使用MAX

时间:2015-09-16 05:08:48

标签: linq

我正在尝试在LINQ中编写我的第一个查询 这是我的SQL查询

SELECT P.id,PS.Id,P.CPersonName
,PS.StartDate FROM Provider P
LEFT OUTER JOIN ProviderSubscription PS ON
P.id=PS.providerID
AND PS.Id=(SELECT max(id)from ProviderSubscription where
providerSubscription.ProviderId=Provider.id)

到目前为止,我写了这个LINQ。

    var query = (from p in db.Providers
                     join ps in db.ProviderSubscriptions on  p.Id 
                     equals ps.ProviderId
                    select new ViewModel
                     {
                         providerid = p.Id,
                         providername = p.ProviderName,
                         subscriptiondate = ps.ExpiryDate,
                       }).ToList();

我无法在LINQ中添加此部分。

 AND PS.Id=(SELECT max(id)from ProviderSubscription where
 providerSubscription.ProviderId=Provider.id)

1 个答案:

答案 0 :(得分:0)

我认为您不需要子查询,当您使用相同的表并使用相同的条件进行连接时,则无需再次使用相同的表编写内部查询。下面的查询应返回相同的结果:

   var query = (from p in db.Providers
          join ps in db.ProviderSubscriptions on  p.Id equals ps.ProviderId
          where ps.Contains(ps.Max(u=>u.id))
          select new ViewModel
             {
                 providerid = p.Id,
                 providername = p.ProviderName,
                 subscriptiondate = ps.ExpiryDate,
               }).ToList();