linQ max return null vall

时间:2012-12-12 16:54:44

标签: asp.net asp.net-mvc entity-framework

我有这样的模型

public partial class TableNames
{

    public string Name { get; set; }
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int IntId { get; set; }
}

然后在控制器中我试图从该模型获得最大IntId

var max = from c in db.TableNames
          select c;

int? Max = max.AsQueryable().Max(x => x.IntId); //This isntruction throws an error
int IntId = ( Max == null ? 1 : Max + 1);

当表没有记录(它是空的)时,控制器会抛出此错误

The cast to value type 'Int32' failed because the materialized value is null. 
Either the result type's generic parameter or the query must use a nullable type.

我该如何解决?

3 个答案:

答案 0 :(得分:3)

请改为尝试:

int? Max = max.AsQueryable().Max(x => (int?)x.IntId);

答案 1 :(得分:3)

如果您不想处理Nullable并想要一个默认值(基于Splendor的代码),您可以执行类似以下的操作:

int Max = max.AsQueryable().Max(x => (int?)x.IntId) ?? 1;

答案 2 :(得分:0)

尝试:

max.Where(i => i.IntId.HasValue).Select(i => i.IntId.Value).Max()