LINQ MAX从表中给出不适当的最大值



我有一个类似于下面的类,我试图从中为特定区域获取最大值:

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

您应该将??包裹在括号中:

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

原因是??的优先级很低,如果您不使用Paranses,则在代码末尾使用0 + 1,将首先计算出来,它将等于:

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

问题是它总是0,您需要放入内部()

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

最新更新