2012-02-22 50 views
6

最大值我有以下表格:LINQ得到列表

ID Amt Received 
-- ---- -------- 
2 55 N 
2 88 Y 
2 44 N 
3 5 N 
3 9 N 
4 5 N 
5 33 Y 
6 43 N 
7 54 N 

    var result = (from rs in db.Exp 
        where rs.ID == id 
        && rs.Received == true 
        select rs).Max().Any(); 

給定一個ID,我需要找到最大金額爲給定的ID,然後檢查它是否是Y,如果是的話,返回true否則返回false。

回答

18

這應該做到這一點;

db.Exp. 
    Where(x => x.ID == id). 
    OrderByDescending(x => x.Amt). 
    Take(1). 
    Any(x => x.Received == "Y"); 
+0

不錯。我懷疑最後一部分實際上應該是'x => x.Received',但我喜歡這種處理空結果的方式。 – 2012-02-22 21:49:07

+0

@Joachim Isaksson - 我喜歡這個解決方案。我需要爲.Any添加另一個條件(x => x.Received ==「Y」&& x => x。司==「會計」),但它不讓我這樣做。任何想法爲什麼。請注意,該分區不在上表中。我忘了包括它 – 2012-02-22 22:20:52

+0

@NatePet你只需要在lambda包含'x =>',所以它應該是'.Any(x => x.Received ==「Y」&& x.Division ==「Accounting 「)' – 2012-02-23 05:48:09

3

你需要告訴它你想要什麼Max的。

var result = 
    (from rs in db.Exp 
    where rs.ID == id && rs.Received 
    select rs) 
    .Max(row => row.Amt) == Y; 

而且你不需要.Any()在所有

0
// "I need to find the max Amt for a given id..." 
var elementWithMaxAmount = 
    db.Exp 
    .Where(x => x.ID == id) 
    .OrderByDescending(x => x.Amount) 
    .FirstOrDefault(); 

// "... and then check if it is Y" 
var result = (elementWithMaxAmount != null && 
       elementWithMaxAmount.Received == "Y"); 
6

不幸的是LINQ不提供方法「的屬性最大值」。 MoreLINQ使用它的MaxBy運算符,但當然不能轉換爲SQL。所以如果這是一個LINQ to SQL(或其他)查​​詢,那麼你需要一種不同的方法。如果它已經LINQ到對象,但是:

return db.Exp.Where(rs => rs.ID == id) 
      .MaxBy(rs => rs.Amt) 
      .Received; 

注意,這是做什麼話你的問題問

  • 出與給定ID的記錄...
  • 找到一個具有最高金額...
  • 並檢查Received

這是一樣:

  • 出的使用收到是真實的給定ID的記錄...
  • 找到一個具有最高金額

還要注意如果有沒有記錄與這個ID,這將拋出異常。

如果你想這樣做的LINQ到SQL等,你可能是最好與排序:

var highest = db.Exp.Where(rs => rs.ID == id) 
        .OrderByDescending(rs => rs.Amt) 
        .FirstOrDefault(); 
return highest != null && highest.Received; 

想,如果你使用LINQ做到這一點對象「,因爲它會對所有結果進行排序,當您只想查找最高金額的結果時。

+0

喬恩,你會怎麼做在c#linq上面? (從rs在db ....) – 2012-02-22 21:47:01

+0

@NatePet:你的意思是在查詢表達式?哪一段代碼?基本上沒有'FirstOrDefault()'的查詢表達式支持(顯然不適用於'MaxBy'),所以你必須在查詢表達式中放置括號來調用方法 - 並且你的投影將是一個否定的-OP。基本上這將是醜陋的。 *絕對值得使用這兩種形式。 – 2012-02-22 21:48:39