2016-06-15 11 views
1

に使用:文の場合は、次のシナリオでLINQクエリ

Id Total points Correct Trends 
1  12    8 
2  12    4 
3  10    5 
4  10    7 
5  10    2 

は私がId = 3を持つ人ですとしましょう。

合計ポイントと正しいトレンドが私より大きいIDを計算したいと思います。

私は以下のクエリを使用するとId=2というユーザを取得することはできません。Correct Trendsはそれ以下です。

var allAbove = (from item in userQuery 
       where (item.Id!= myData.Id && 
       item.TotalPoints >= (myData.TotalPoints) && 
       item.CorrectTrends >= (myData.CorrectTrends)) 

私だけ

答えて

2

ロジックがまっすぐ前方実際にある合計ポイントが等しいときに合計ポイントの他の賢明なチェックの正しい動向を探していることを確認する方法を見つけることができないのです。

var allAbove = (from item in userQuery 
      where (item.Id!= myData.Id && 
      item.TotalPoints > myData.TotalPoints || 
      (item.TotalPoints == myData.TotalPoints && 
      item.CorrectTrends >= myData.CorrectTrends))); 

これはどちらかの合計ポイントが大きい場合又は合計ポイントが正しいトレンド等しいチェックsはより大きい。

+0

をやらせるよそれはあまりにも簡単だったが、私の心は、現時点ではロックされています。どうもありがとう :) – Kamran

1

あなたが唯一のタイブレイクのためCorrectTrendsを使用したいので、正しい式は次のようになります。>=は、タイでのアイテムを避けるために>に交換する必要があること

item.Id!= myData.Id && (
     item.TotalPoints > myData.TotalPoints  // "Wins" on total points 
|| (item.TotalPoints == myData.TotalPoints  // Same total points, 
    && item.CorrectTrends > myData.CorrectTrends) // but higher correct trends 
) 

注意。

0

私はより多くのメソッドチェーン好きなので:

var you = items.Where(x=>x.Id == myId).FirstOrDefault(); 
var allAbove = items.Where(x=>x.Id!=you.Id) 
.Where(x=>x.TotalPoint>you.TotalPoints || x.CorrectTrends>you.CorrectTrends); 

を私はあなたがnullチェック:)

関連する問題