var Version = (from f in db.Forms select new { Version = f.Version }).Max(c => c.Version);
报错,转换到值类型的系统。Int32失败是因为物化值为null。结果类型的泛型参数或查询必须使用可空类型。
因为Version 在数据库中时int类型,当数据库中无数据的时候,Version 等于空,Version 又是int类型就报错了。
要不直接将Version为空的话置为0试试
Version = f.Version??0
不行的,会有绿波浪提示,我把他Tostring()了。
@你猜丶: 绿波浪没报错啊。。。。
@华临天下: 啊,绿波浪不是错的吗?
不知道为什么没有用耶,给了判断也不行,最多等于NULL,转不了0
@你猜丶: 那你编译的话,它会编译不通过吗?还是只是给你警告?
@你猜丶: 你上面写的没问题吗?Version = f.Version==null?0:f.Version还是这个方法不行?
@华临天下: 我用了两种
1.Version = f.Version==null?0:f.Version
2.Version = f.Version.Tostring()==null?"0":f.Version.Tostring()
两种都不行,得到的都是NULL
@你猜丶: null能ToString()?
我这边给你写了个差不多的,但是毕竟我这个是自己造的假数据,显示结果是0
List<Form> l_form = new List<Form>(); l_form.Add(new Form() { Version=null }); var Version = (from f in l_form select new { Version = f.Version??0 }).Max(c => c.Version);
@华临天下: 好像不对,因为我数据库中是一条数据都没有的,难道我不能直接这样?得先判断是否有数据?
@你猜丶: 主要我这边电脑装的VS2010的,不能写个例子来测试测试。。。要不你就先判断是否有数据吧
直接用lambda表达式写比较简单
@华临天下: 哎,我不会lambda表达式,那我就先判断吧
@华临天下: 请问查询Version最大值的一整列linq怎么写啊?
@你猜丶: 你有判断是否为空的吗?
如果不为空的话直接
var maxVer=db.Forms.max(c=>c.Version);
应该就可以了
@华临天下: 这样不行勒,我想要一整列数据,这样只会出来一个Version数据,好奇怪
最大值本来就只有一个的吧????
你的意思是找出所有的最大的吧?
var maxs=db.Forms.where(c=>c.Version==db.Forms.max(a=>a.Version)).ToList();
@华临天下: 额,就是找出最大值Version的一整行,不单单只是Version一个字段,是相关的所有字段
id name Version这样的
@华临天下: 嗯,对,可以,谢了
将 Version 定义为 int?
类型,select 时 Version = f.Version.Value