2016-07-15 25 views
1

我想獲取性能和可用性時間的最後5個值。爲了讓我嘗試了多種方式,但不幸的是沒有成功。運算符&&不能應用於十進制和十進制類型的操作數

我已經試過這樣:

var completeTransactions2 = temp4 
         .Where(x => x.GroupidAvai == x.GroupidPerf && x.KeyTimeAvai == x.KeyTimePerf) 
         .GroupBy(x => x.GroupidAvai) 
         .Select(group => group.OrderByDescending(record => (record.KeyTimeAvai) && (record.KeyTimePerf)).Take(5)); 

但後來我得到一個錯誤:操作& &不能應用於類型十進制和十進制的操作數。

有了這些信息,我嘗試了一些東西,但結果是隻有一個perfTime正在採取最後5個值並將其反轉。可用性只有一個avaitime。這是查詢:

var orderedTemp72 = temp4 
         .Where(x => x.GroupidAvai == x.GroupidPerf) 
         .GroupBy(x => new { x.GroupidAvai, x.GroupidPerf }) 
         .Select(x => x.OrderByDescending(record => record.KeyTimeAvai) 
         .ThenByDescending(record => record.KeyTimePerf).Take(5).Reverse()); 

我希望有人可以把我如何解決這個問題的正確方向。如果有問題,請不要猶豫,問。

謝謝您的閱讀。

+1

嘗試圍繞這兩個==表達式使用插件括號。 –

+1

你想達到什麼目標還不是很清楚。如果您使用'x.GroupidAvai == x.GroupidPerf'過濾項目,那麼爲什麼按'x.GroupidAvai,x.GroupidPerf'分組。這兩個過濾器都不正確,或者group by包含冗餘字段。提供樣本輸入數據和期望的輸出將幫助我們理解目標以幫助您。 –

+0

@IvanStoev你是對的。有一些雙重數據,但現在我需要在這裏達到我的最終目標。對不起,我感到困惑,但你們都幫助我解決了這個障礙:) –

回答

1

謝謝大家的回答/我的幫助。真的很感激:) 隨着你所有的答案,我來到以下解決方案,我可以使用。

var completeTransactions = temp 
        .Where(x => x.GroupidAvai == x.GroupidPerf && x.KeyTimeAvai == x.KeyTimePerf) 
        .GroupBy(x => x.GroupidAvai) 
         .Select(group => group.OrderByDescending(record => record.KeyTimeAvai).Reverse().Take(5).OrderByDescending(record => record.KeyTimePerf).Reverse().Take(5)); 
1

我認爲問題在於您的orderbyDescending語句。

嘗試像

var completeTransactions2 = temp4 
        .Where(x => x.GroupidAvai == x.GroupidPerf && x.KeyTimeAvai == x.KeyTimePerf) 
        .GroupBy(x => x.GroupidAvai) 
        .Select(group => group.OrderByDescending(record => record.KeyTimeAvai).ThenBy(x => record.KeyTimePerf)).Take(5)); 
1

嘗試通過做OrderByDescendingThenByDescending使用此語法

var completeTransactions2 = temp4 
        .Where(x => x.GroupidAvai == x.GroupidPerf && x.KeyTimeAvai == x.KeyTimePerf) 
        .GroupBy(x => x.GroupidAvai) 
        .Select(gro => gro.OrderByDescending(r => r.KeyTimeAvai).ThenByDescending(r => r.KeyTimePerf).Take(5)); 

OROrderByDescendingThenBy

var completeTransactions2 = temp4 
         .Where(x => x.GroupidAvai == x.GroupidPerf && x.KeyTimeAvai == x.KeyTimePerf) 
         .GroupBy(x => x.GroupidAvai) 
         .Select(gro => gro.OrderByDescending(r => r.KeyTimeAvai).ThenBy(r => r.KeyTimePerf).Take(5)); 

如果你想要的五大KeyTimeAvai或KeyTimePerf

OrderByDescending(x => x.KeyTimeAvai >= x.KeyTimePerf 
         ? x.KeyTimeAvai 
         : x.KeyTimePerf).Take(5); 

如果您需要的五大KeyTimeAvai和五大KeyTimePerf(所以10個結果),我會做這樣的事情看看Here

1

var groupedTransactions= temp4 
          .Where(x => x.GroupidAvai == x.GroupidPerf && 
             x.KeyTimeAvai == x.KeyTimePerf) 
          .GroupBy(x => x.GroupidAvai); 



var greatestByAvai = groupedTransactions 
        .Select(group => group.OrderByDescending(record => record.KeyTimeAvai) 
        .Take(5); 
var greatestByPerf = groupedTransactions 
        .Select(group => group.OrderByDescending(record => record.KeyTimePerf) 
        .Take(5); 

var allTransactions = greatesByAvai.Concat(greatestByPerf); 
相關問題