3

当我尝试在 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 查询给出错误运算符“!=”不能应用于“布尔”类型的操作数?和'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

提前致谢。

4

5 回答 5

9

我怀疑你只是想要:

&& !c.CHILDAPPLIES
&& !c.SPOUSEAPPLIES

...尽管您应该考虑是否希望它匹配列为 NULL 而不是 true 或 false 的行。如果上述内容无法编译(可能无法编译),您可以使用 null-coalescing 运算符有效地提供“默认”值:

&& !(c.CHILDAPPLIES ?? true)
&& !(c.SPOUSEAPPLIES ?? true)

或者

&& !(c.CHILDAPPLIES ?? false)
&& !(c.SPOUSEAPPLIES ?? false)

问题在于,在 LINQ 映射中,它们不是“0 或 1”值——它们是“真或假”值(或 null)——因此您无法将它们与整数进行比较。

于 2013-09-03T11:14:29.693 回答
2

尝试关注我认为这是你想要的

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();
于 2013-09-03T11:21:37.810 回答
1

我建议它是以下两个之一:

&& c.CHILDAPPLIES  != 1
&& c.SPOUSEAPPLIES != 1

即使它们是Bitlinq 类型,也会将它们作为布尔值进行比较

于 2013-09-03T11:15:28.517 回答
1

如果它返回布尔值?你不能把它和真假比较吗?

于 2013-09-03T11:16:48.023 回答
0

而不是使用 '!=' 运算符检查它,使用

!c.CHILDAPPLIES && !c.SPOUSEAPPLIES.

这可能会有所帮助

于 2013-09-03T11:20:57.953 回答