操作员'=';不能应用于类型为';bool';和';int';
本文关键字:bool int 不能 操作员 应用于 类型 | 更新日期: 2023-09-27 18:30:04
当我试图在Linq Pad中运行查询时,出现了上述错误,如下所示,
var qry = (from i in INTERNETDATAs
join c in COVERS on Convert.ToInt32(i.COVERTYPE) equals c.COV_TYPE
where i.DATELOADED >= new DateTime(2013,7,1)
&& i.DATELOADED < new DateTime(2013,8,1)
&& i.CAMPAIGNTYPE == "4"
&& c.COVERTYPEID == 17063789
&& c.CHILDAPPLIES != 1
&& c.SPOUSEAPPLIES != 1
select i
);
qry.Dump();
COVERS表中的列c.CHILDAPPLIES和c.SPOUSEAPPLIES属于(bit,null)类型。
我的Sql查询工作正常,如下所示,但我的LINQ查询给出错误Operator"!="不能应用于"bool?"类型的操作数和"int"
SELECT Count(*)
FROM INTERNETDATA I Join COVERS C ON C.COV_TYPE = CONVERT(int, I.COVERTYPE)
WHERE ((I.DATELOADED >= CONVERT(DATETIME, '1 Jul 2013 00:00:00'))
AND (I.DATELOADED < CONVERT(DATETIME, '1 Aug 2013 00:00:00')))
AND (CONVERT(int, I.COVERTYPE) = C.COV_TYPE)
AND (C.COVERTYPEID = 17063789)
AND (I.CAMPAIGNTYPE = 4)
AND C.CHILDAPPLIES != 1
AND C.SPOUSEAPPLIES !=1
提前谢谢。
我怀疑你只是想要:
&& !c.CHILDAPPLIES
&& !c.SPOUSEAPPLIES
尽管您应该考虑是否希望它与列为NULL而不是true或false的行相匹配。如果上面的内容没有编译(可能没有),你可以有效地用null合并运算符提供"默认"值:
&& !(c.CHILDAPPLIES ?? true)
&& !(c.SPOUSEAPPLIES ?? true)
或
&& !(c.CHILDAPPLIES ?? false)
&& !(c.SPOUSEAPPLIES ?? false)
问题是,在LINQ映射中,它们不是"0或1"值——它们是"true或false"值(或null)——所以不能将它们与整数进行比较。
尝试以下操作,我认为这就是您想要的
var qry = (from i in INTERNETDATAs
join c in COVERS on Convert.ToInt32(i.COVERTYPE) equals c.COV_TYPE
where i.DATELOADED >= new DateTime(2013,7,1)
&& i.DATELOADED < new DateTime(2013,8,1)
&& i.CAMPAIGNTYPE == "4"
&& c.COVERTYPEID == 17063789
&& c.CHILDAPPLIES != true
&& c.SPOUSEAPPLIES != true
select i
);
qry.Dump();
我建议它是以下2:之一
&& c.CHILDAPPLIES != 1
&& c.SPOUSEAPPLIES != 1
即使它们属于Bit
类型,linq也会将它们作为布尔进行比较
如果返回bool?难道你就不能把它和真或假做比较吗?
而不是使用'!='进行检查操作员,使用
!c.CHILDAPPLIES && !c.SPOUSEAPPLIES.
这可能有助于