2016-01-25 2 views
0

У меня есть оператор SQL, который должен быть изменен для любой правильной формы Linq (синтаксис запросов и/или лямбда) - любые мысли будут с благодарностью:Относительно простой SQL-запрос к Linq (с группировкой)

SELECT DISTINCT 
    CUSTOMER_NUM, CUSTOMER_NAME, 
    COUNT(*) AS 'COUNT', 
    SUM(CASE WHEN State = 'State1' THEN 1 ELSE 0 END) AS 'State1Count', 
    SUM(CASE WHEN State = 'State2' THEN 1 ELSE 0 END) AS 'State2Count', 
    ISNULL(SUM(USD_TOTAL_MRC_AMT), 0) AS 'USD_TOTAL_MRC_AMT_SUM'   
FROM Table1 
WHERE 
(
    USERID = @UserId //@UserId is a parameter passed into the stored procedure 
) 
GROUP BY CUSTOMER_NUM, CUSTOMER_NAME 
ORDER BY 
    CUSTOMER_NAME 

Вот вдоль линий, что я до сих пор работаю в LINQPad:

Table1.GroupBy(i => 1).Select(g => new { 
Total = g.Count(i => i.State == "AM Re-Rate Pool" || i.State == "AM Renewal Pool"), 
ReRates = g.Count(i => i.State == "State1"), 
Renewals = g.Count(i => i.State == "State2 
}); 

Спасибо!

+1

С какими проблемами вы сталкиваетесь? –

+1

FYI Это называется синтаксисом метода, а не лямбдой. – juharr

+0

не успешно добавлен в customer_num & CUSTOMER_NAME в группировок – neoswarm

ответ

0

Вот как я сделал бы это с синтаксисом метода.

Table1.Where(t => t.UserId = userId) 
     .OrderBy(t => t.CustomerName) 
     .GroupBy(t => new {t.Customer_Num, t.Customer_Name}) 
     .Select(grp => new 
     { 
      grp.Key.Customer_Num, 
      grp.Key.Customer_Name, 
      Count = grp.Count(), 
      State1Count = grp.Where(t => t.State = "State1").Count(), 
      State2Count = grp.Where(t => t.State = "State2").Count(), 
      USD_TOTAL_MRC_AMT_SUM = grp.Sum(t => t.USD_TOTAL_MRC_AMT_SUM) ?? 0 
     }) 
     .Distinct(); 
Смежные вопросы