首页 新闻 赞助 找找看

Linq查询单个int类型最大值报错。

0
[已解决问题] 解决于 2018-05-30 14:57
         var Version = (from f in db.Forms
                           select new
                           {
                               Version = f.Version
                           }).Max(c => c.Version);

报错,转换到值类型的系统。Int32失败是因为物化值为null。结果类型的泛型参数或查询必须使用可空类型。

因为Version 在数据库中时int类型,当数据库中无数据的时候,Version 等于空,Version 又是int类型就报错了。

你猜丶的主页 你猜丶 | 初学一级 | 园豆:183
提问于:2018-05-29 18:20
< >
分享
最佳答案
0

要不直接将Version为空的话置为0试试

 Version = f.Version??0
奖励园豆:5
华临天下 | 小虾三级 |园豆:1501 | 2018-05-30 10:12

不行的,会有绿波浪提示,我把他Tostring()了。

你猜丶 | 园豆:183 (初学一级) | 2018-05-30 10:17

@你猜丶: 绿波浪没报错啊。。。。

华临天下 | 园豆:1501 (小虾三级) | 2018-05-30 10:18

@华临天下: 啊,绿波浪不是错的吗?

你猜丶 | 园豆:183 (初学一级) | 2018-05-30 10:19

不知道为什么没有用耶,给了判断也不行,最多等于NULL,转不了0

你猜丶 | 园豆:183 (初学一级) | 2018-05-30 10:26

@你猜丶: 那你编译的话,它会编译不通过吗?还是只是给你警告?

华临天下 | 园豆:1501 (小虾三级) | 2018-05-30 10:26

@你猜丶: 你上面写的没问题吗?Version = f.Version==null?0:f.Version还是这个方法不行?

华临天下 | 园豆:1501 (小虾三级) | 2018-05-30 10:27

@华临天下: 我用了两种

1.Version = f.Version==null?0:f.Version

2.Version = f.Version.Tostring()==null?"0":f.Version.Tostring()

两种都不行,得到的都是NULL

你猜丶 | 园豆:183 (初学一级) | 2018-05-30 10:30

@你猜丶: 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);
华临天下 | 园豆:1501 (小虾三级) | 2018-05-30 10:33

@华临天下: 好像不对,因为我数据库中是一条数据都没有的,难道我不能直接这样?得先判断是否有数据?

你猜丶 | 园豆:183 (初学一级) | 2018-05-30 10:37

@你猜丶: 主要我这边电脑装的VS2010的,不能写个例子来测试测试。。。要不你就先判断是否有数据吧

直接用lambda表达式写比较简单

华临天下 | 园豆:1501 (小虾三级) | 2018-05-30 10:44

@华临天下: 哎,我不会lambda表达式,那我就先判断吧

你猜丶 | 园豆:183 (初学一级) | 2018-05-30 10:45

@华临天下: 请问查询Version最大值的一整列linq怎么写啊?

你猜丶 | 园豆:183 (初学一级) | 2018-05-30 14:16

@你猜丶: 你有判断是否为空的吗?

如果不为空的话直接

var maxVer=db.Forms.max(c=>c.Version);

应该就可以了

华临天下 | 园豆:1501 (小虾三级) | 2018-05-30 14:24

@华临天下: 这样不行勒,我想要一整列数据,这样只会出来一个Version数据,好奇怪

你猜丶 | 园豆:183 (初学一级) | 2018-05-30 14:25

最大值本来就只有一个的吧????

你的意思是找出所有的最大的吧?

var maxs=db.Forms.where(c=>c.Version==db.Forms.max(a=>a.Version)).ToList();
华临天下 | 园豆:1501 (小虾三级) | 2018-05-30 14:33

@华临天下: 额,就是找出最大值Version的一整行,不单单只是Version一个字段,是相关的所有字段

id name Version这样的

你猜丶 | 园豆:183 (初学一级) | 2018-05-30 14:44

@华临天下: 嗯,对,可以,谢了

你猜丶 | 园豆:183 (初学一级) | 2018-05-30 14:58
其他回答(1)
0

将 Version 定义为 int? 类型,select 时 Version = f.Version.Value

dudu | 园豆:31075 (高人七级) | 2018-05-29 18:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册