首页 新闻 赞助 找找看

WebApi中使用Linq出现NullReferenceException的问题

0
悬赏园豆:60 [已解决问题] 解决于 2015-05-18 10:53

我在webapi中使用通过Linq过滤数据,但是出现如下问题:代码如下:

如果红色部分,students不为空,一切正常。但是如果students 为空,则会在return Ok(models.FirstOrDefault());的时候报System.NullReferenceException 异常。求解决。

相关代码:

var models = db.tb_Account.Where(a => a.username == username && a.password == password).Select(e => new
{

e.id,
e.address,
e.age,
e.imgurl,
e.nickName,
e.password,
e.username,
e.weixin,
students=db.View_Student.Where(s=>s.guardianId==e.id)
});

if (models.Count() > 0)
return Ok(models.FirstOrDefault());

 

自己解决了,我来整理下,给后来人参考。

问题是这样的:我自己创建了视图,显示学生信息,来自多个表。刚开始一切正常,后来多添加了几条数据后发现红色代码部分报System.NullReferenceException 错误,而且已经获取到数据,因为models 的count属性>0。一直以为是我修改了哪部分代码导致的。

原因:因为我创建的视图,没有添加索引,而且任何一列都不唯一的,都有可能出现重复的值。刚开始,数据少,WebApi会自定根据你的数据默认一个列作为索引列。后来,添加了数据之后,每一列都有重复的值,WebApi无法自动识别了,就报错了,而且FirstOrDefault等方法也无法使用。

解决:只需修改视图,添加一列不会重复的列即可,我加上了Id列,就搞定了。

问题补充:

多次尝试,证明,是因为View_student是由sql中视图生成的,求解决办法。

yuexingchen2的主页 yuexingchen2 | 初学一级 | 园豆:148
提问于:2015-05-14 15:10
< >
分享
最佳答案
0

ok是啥?

var models = db.tb_Account.Where(a => a.username == username && a.password == password).Select(e => new
{
e.id,
e.address,
e.age,
e.imgurl,
e.nickName,
e.password,
e.username,
e.weixin,
students=db.View_Student.Where(s=>s.guardianId==e.id)
}).FirstOrDefault();

if (models != null)
return Ok(models);

改成这样,错误出在哪儿。

收获园豆:40
爱编程的大叔 | 高人七级 |园豆:30839 | 2015-05-14 15:38

也是一样,是因为Vew_Studnet 为视图生成的类。如果数据表则一起正常。怎么回事呢

yuexingchen2 | 园豆:148 (初学一级) | 2015-05-14 16:54

@yuexingchen2: 什么叫也是一样?

我问你错误出在哪一行上。

是FirstOrDefault还是Ok上。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-05-14 16:59
其他回答(2)
0

if (queryOne.Any())
{

}

试试这样判断

收获园豆:10
紫枫叶 | 园豆:108 (初学一级) | 2015-05-14 15:32
0

建议将代码逻辑拆分开,搞清楚到底是那句代码错误。

收获园豆:10
幻天芒 | 园豆:37175 (高人七级) | 2015-05-14 16:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册