2015-02-10 22 views
0

我想用lambda將此語句重寫爲Linq語句。試圖總結計算我的選擇語句

var summe1 = (from l in db.Lg7s 
    && new int[]{0,40}.Contains(l.REATE) 
    && l.ANSWERING>0 
    select (l.TALKINGTIME + l.ONHOLDTIME + l.ACTIONTIME + l.UPTIME)).Sum(i => i); 

我試圖做這樣的:

T4Number = group 
    .Where(lg => new int[]{38,40}.Contains(lg.CAUSE) && lg.ANSWERING>0) 
    .Select(lg => new {DurationOfCallProcessing = lg.EN_ TALKINGTIME + lg.EN_ ONHOLDTIME + lg.EN_ ACTIONTIME + lg.UPTIME }) 
    .Sum() 

但是IDE說,那筆isn't有效。

回答

0

你不能「總結」一個匿名類型。我想你想:

T4Number = group 
    .Where(lg => new int[]{38,40}.Contains(lg.CAUSE) && lg.ANSWERING>0) 
    .Select(lg => new {DurationOfCallProcessing = lg.EN_ TALKINGTIME + lg.EN_ ONHOLDTIME + lg.EN_ ACTIONTIME + lg.UPTIME }) 
    .Sum(x => x.DurationOfCallProcessing); 

但是如果你只想要總和沒有必要創建anonymos請在所有:

T4Number = group 
    .Where(lg => new int[]{38,40}.Contains(lg.CAUSE) && lg.ANSWERING>0) 
    .Sum(lg => lg.EN_ TALKINGTIME + lg.EN_ ONHOLDTIME + lg.EN_ ACTIONTIME + lg.UPTIME); 
+0

非常感謝!它似乎工作! – Dana 2015-02-10 11:00:19

0

嘗試沒有匿名類型:

var causes = new [] { 38, 40 }; 

T4Number = group 
    .Where(lg => causes.Contains(lg.CAUSE) && lg.ANSWERING>0) 
    .Select(lg => lg.EN_ TALKINGTIME + lg.EN_ ONHOLDTIME + lg.EN_ ACTIONTIME + lg.UPTIME }) 
    .Sum() 

這也改善了過濾器謂詞不再new-每次造成的原因

+0

非常感謝!它似乎工作! – Dana 2015-02-10 10:59:40