2017-08-31 93 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为您的善意帮助我。赞赏:) –