该物业' x' on' tblX'无法设置为' null'值。您必须将此属性设置为类型为' Int16'的非空值。

时间:2012-11-02 07:53:19

标签: c# database linq entity-framework types

List<tblX> messages = (from x in db.tblX where x.msg_id == id_id 
                           || x.name == firstName  select x).ToList();

我收到错误:

  

'tblX'上的属性'x'无法设置为'null'值。您必须将此属性设置为“Int16”类型的非null值。

我在db中有一个属性msg_blocked,它是可空的和整数。我知道我需要进行转换,但我不会在我的linq中使用它或需要它。

2 个答案:

答案 0 :(得分:3)

似乎tblX的类定义与数据库表示不匹配,因此要么修改类以接受可以为空的值,要么只突出显示必需的字段:

List<tblX> messages = (from x in db.tblX 
                   where (x.msg_id == id_id || x.name == firstName)
                   select new tblX
                   {
                    //required fields
                    msg_id = x.msg_id,
                    name = x.name,
                    ...
                   }).ToList();

附录:你遇到这个问题的原因就在幕后     select x 这被翻译成了一个     select new tblX 它投射到所有可用字段中。提供的代码更明确,并指定要查询哪些字段然后投影到。

答案 1 :(得分:1)

List<tblX> messages = (from x in db.tblX 
                       where (x.msg_id == id_id || x.name == firstName) && 
                              x.msg_blocked != null
                       select x).ToList();