将SQL查询/子查询转换为LINQ

时间:2014-01-21 10:25:07

标签: c# asp.net sql sql-server linq

原件:

select *, (PlanBasedOnDataUseage - CurrentPlanPricePerMonth) as MonthlyOverageInvoiceAmount from       

(      
Select *  ,       

(select top 1 PricePerMonth from accounttypes where IsDeleted = 0 and AvailableOnline = 1      
and  RecordsPerMonth > 0) as PlanBasedOnDataUseage      
 ,       
(select top 1 AccountTypeName from accounttypes where IsDeleted = 0 and AvailableOnline = 1      
and  RecordsPerMonth > 0) as SuggestPlanBasedOnDataUsage      
from      
(      
select       
 ClientID, ClientName, ClientEmail, AccountOwnerName,       
 AccountExpiryDate,       
 DATEADD(day, DAY(AccountExpiryDate)-1,       
 CAST(      
  cast(YEar(GETDATE())as nvarchar(4)) +       
  replace(str(cast(Month(GETDATE())as nvarchar(2)), 2), ' ', '0') + '01'      
   as datetime)      
 ) as MonthlyRollOverDate      
 , AT.RecordsPerMonth as CurrentPlanMentionsMaxPerMonth      
    , AT.AccountTypeName as CurrentPlanAccountType       
 , AT.PricePerMonth as CurrentPlanPricePerMonth      
 from clients C      
 inner join AccountTypes AT on C.AccountTypeID = AT.AccountTypeID       
 LEFT OUTER JOIN AccountOwner AO on AO.AccountOwnerID = C.AccountOwnerID  
 WHERE       
 AT.AccountTypeName not in ('Standard', 'Demo', 'Trial') and      
 AccountExpiryDate > getdate()      
  AND      
  (      
    DATEADD(day, DAY(AccountExpiryDate)-1,       
     CAST(      
      cast(YEar(GETDATE())as nvarchar(4)) +       
      replace(str(cast(Month(GETDATE())as nvarchar(2)), 2), ' ', '0') + '01'      
       as datetime)      
     )       

   >=        
    --Monday Last Week      
    dateadd(d, -7, DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 0))       
  AND      
    --Calc MonthlyRollOverDate      
      DATEADD(day, DAY(AccountExpiryDate)-1,       
       CAST(      
        cast(YEar(GETDATE())as nvarchar(4)) +       
        replace(str(cast(Month(GETDATE())as nvarchar(2)), 2), ' ', '0') + '01'      
         as datetime)      
       )       
   <=       
    -- THis Monthday      
    DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 0)      



  )       
) as ClientsRollingOverThisWeek      

) as ClientsRollingOverThisWeekWithRealPlanAttached       

where (PlanBasedOnDataUseage - CurrentPlanPricePerMonth) > 0    

1 个答案:

答案 0 :(得分:-1)

您可以使用Linqpad显示LINQ查询的SQL输出。