2010-09-28 56 views
1

我有形式的查询:表达始终是真实的(当它不是)

var fruits = (from p in fruitDB 
       where (p.Fruit.FruitID == fruitID && p.Color.ColorID != null) 
       select p.Color).Distinct(); 

VS 2010给我蓝色的下划线,并告诉我“表达始终是真实的”。现在,我同意如果数据库中的数据没有被塞满,但在我的情况下,如果我不包含!= null

这个错误或基于规则集在我的数据库架构? (尽管底层数据与它相矛盾)

+1

p.Color.ColorID是什么类型?它是结构体,类还是值类型? – 2010-09-28 05:47:38

+0

什么是fruitDB?集合,数据集表,数据库表? “ColorID”的类型和可空性规则是什么? – 2010-09-28 05:48:34

+2

这听起来像数据库配置为可空,但模型('ColorID')不是......? – 2010-09-28 06:12:17

回答

2

Color.ColorID是什么类型?它是一个整数吗?你应该检查p.Color!= null吗?

+0

这也是我的第一个想法。但后来我的第二个想法是,“你甚至可以将'int'值与'null'进行比较吗?” – Domenic 2010-09-28 05:48:35

+0

由于'int'的值类型永远不会等于'int'类型的'null',因此您会得到一个符合“表达式结果总是'false'的行的编译器错误。 – 2010-09-28 05:52:11

+0

编译器警告,其实并不是错误 – Carson63000 2010-09-28 06:30:13

2

您能否包含实体图?

如果Color是一个表,并且ColorID是其主键,则它不会为空。也许你的第一个表中的外键是可空的,但这不是你在这里测试的。

0

是否为ColorID为空?你应该检查是否p.Color.ColorID == 0?

相关问题