2017-08-31 117 views
0

給予不恰當的最大值我有一類像下面從我試圖獲取特定區域的最大值:LINQ的最大距離表

public partial class Ads 
    { 
     public int Id { get; set; } 
     public int RegionId { get; set; } 
     public int Charge { get; set; } 
     public Nullable<int> Group { get; set; } 
    } 

記錄:

Id  RegionId Charge Group 
1  100   100  1 

我現在想爲regionid = 100獲取最大值,但問題是我總是1與以下查詢:

int group = context.Ads.Where(a => a.RegionId == 100).Max(t => (int?)t.Group)) ?? 0 + 1; 

爲什麼以上是給我1而不是2

+2

爲什麼它應該給2? – Rahul

+1

@Rahul OP期望'Max'返回1,然後他們加1。 – juharr

+1

順便說一句'public Nullable Group {get;組; }'應該是'公衆詮釋? Group {get;組; }' – Rahul

回答

5

你應該在小括號括起??

int group = (context.Ads.Where(a => a.RegionId == 100).Max(t => (int?)t.Group) ?? 0) + 1; 

的原因是??具有非常低的優先級,如果你沒有在程序結束使用括號0 + 1將被計算第一,這將是等於:

int group = context.Ads.Where(a => a.RegionId == 100).Max(t => (int?)t.Group) ?? 1; 
                   // as 0 + 1 equals to 1 
+1

可能值得添加解釋,如果沒有這個優先級與context.Ads.Where(a => a.RegionId == 100)相同。 Max(t =>(int?)t.Group))?? (0 + 1)'這與'context.Ads.Where(a => a.RegionId == 100)相同.Max(t =>(int?)t.Group))?? 1' –

+1

@JonHanna我添加了一些解釋 –

+0

仍然有您的查詢語法錯誤,即第一個查詢 –

2

問題是,它始終爲0,你需要把裏面的()

int group = (context.Ads.Where(a => a.RegionId == 100).Max(t => (int?)t.Group)) ?? 0) + 1; 
+0

Upvoted爲您的善意幫助我。讚賞:) –