Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 运算符“!=”无法应用于“bool”和“int”类型的操作数_C#_Linq - Fatal编程技术网

C# 运算符“!=”无法应用于“bool”和“int”类型的操作数

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) &&

当我试图在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();
“我的封面”表中的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();