C# 运算符“!=”无法应用于“bool”和“int”类型的操作数
当我试图在Linq Pad中运行我的查询时,我得到了上述错误,如下所示C# 运算符“!=”无法应用于“bool”和“int”类型的操作数,c#,linq,C#,Linq,当我试图在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) &&
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();
“我的封面”表中的c.CHILDAPPLIES和c.spooseApplies列是位null类型
我的Sql查询工作正常,如下所示,但我的LINQ查询给出了错误运算符“!=”无法应用于“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)
或
问题是,在LINQ映射中,它们不是0或1值-它们是真值或假值或空值-因此不能将它们与整数进行比较。我建议它是以下两种类型之一:
&& c.CHILDAPPLIES != 1
&& c.SPOUSEAPPLIES != 1
即使它们是Bit类型,如果返回bool,linq也会将它们作为布尔值进行比较?你就不能把它与真或假进行比较吗?而不是用“!=”来检查它操作员,使用
!c.CHILDAPPLIES && !c.SPOUSEAPPLIES.
这可能会有帮助试试下面我想这就是你想要的
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();
在Linq中,不能使用Convert。ToInt32@AmitAgrawal可以在Linq中使用Convert.ToInt32。一些Linq表达式转换器可能不支持它,但例如Linq到实体。
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();