我有一个叫ResonseRaw myMockResponse = ..... mock the response
RequestParams myParameter = ..... mock the params
doReturn(myMockResponse)//
.when(externalConnector)//
.callExternal(isA(myParameter.getClass()), isA(MyResponse.class));
ResonseRaw myMockResponse2 = ..... mock the response
RequestParams myParameter2 = ..... mock the params
doReturn(myMockResponse2)//
.when(externalConnector)//
.callExternal(isA(myParameter2.getClass()), isA(MyResponse.class));
的bolean条件
如果为true,则我要确保单元格值不为空 otherweise可以为空。我有以下内容:
doReturn(myMockResponse2)//
.when(externalConnector)//
.callExternal(eq(myParameter), isA(MyResponse.class));
问题: 好吧,简单地说,使用上述方法时,它无法正确过滤。
accessories
,然后应该给我一个包含0个项目的列表,但我仍在列表中找到项目。
我在做什么错?
编辑:
修改后的代码:
var items = (from a in allRowsrows
where accessories == true ? a["MASTERID"].ToString() != "": a["MASTERID"].ToString() == "" &&
a["ITEMNO"].ToString() != a["NEWITEMNO"].ToString() ||
a["LABEL"].ToString() != a["NEWVISITEMNO"].ToString()
select new ItemsToUpdate
{
isAccessory = accessories,
Item = a
}
).ToList();
仍然过滤错误。
答案 0 :(得分:5)
这就是为什么您未获得正确结果的原因。这种情况:
where accessories == true ? a["MASTERID"].ToString() != "": a["MASTERID"].ToString() == "" &&
a["ITEMNO"].ToString() != a["NEWITEMNO"].ToString() ||
a["LABEL"].ToString() != a["NEWVISITEMNO"].ToString()
表示此:
如果附件为真,则检查MASTERID是否为空。这就对了。但是,这就是错误的所在,如果附件为假,请检查以下整个情况:
a["MASTERID"].ToString() == "" &&
a["ITEMNO"].ToString() != a["NEWITEMNO"].ToString() ||
a["LABEL"].ToString() != a["NEWVISITEMNO"].ToString()
其评估如下:
(a["MASTERID"].ToString() == "" &&
a["ITEMNO"].ToString() != a["NEWITEMNO"].ToString()
)
OR
a["LABEL"].ToString() != a["NEWVISITEMNO"].ToString()
换句话说,如果MASTERID为空并且ITEMNO与NEWITEMNO不同,则它将永远不会检查LABEL。 您在问题中编辑的代码没有区别,仍然与上面的意思相同。
现在您的问题是,为什么谜题的答案会为您提供正确的结果。这是他的感觉:
where accessories ? a["MASTERID"].ToString() != "" : true
where a["ITEMNO"].ToString() != a["NEWITEMNO"].ToString() || a["LABEL"].ToString() != a["NEWVISITEMNO"].ToString()
这意味着:
如果附件为true,则检查MASTERID是否为空。否则,请使用值true
。另外,请检查以确保ITEMNO与NEWITEMNO不相同或LABEL与NEWVISITITEMNO不相同。
因此本质上是这样做的:
(accessories ? a["MASTERID"].ToString() != "" : true)
&&
(
a["ITEMNO"].ToString() != a["NEWITEMNO"].ToString() ||
a["LABEL"].ToString() != a["NEWVISITEMNO"].ToString()
)
我不知道您的完整要求,但即使是Enigmativity的回答,也可能会产生错误的结果(也可能不会)。这完全取决于您何时会遇到具体情况。也许,我的解释可以指导您。
答案 1 :(得分:2)
这是你的追求吗?
var items =
(
from a in allRowsrows
where accessories ? a["MASTERID"].ToString() != "" : true
where a["ITEMNO"].ToString() != a["NEWITEMNO"].ToString() || a["LABEL"].ToString() != a["NEWVISITEMNO"].ToString()
select new ItemsToUpdate
{
isAccessory = accessories,
Item = a
}
).ToList();
答案 2 :(得分:-2)
您尝试在where子句中使用方括号吗?
var items = (from a in allRows
where (accessories == true ? a["MASTERID"].ToString() != "": true &&
(a["ITEMNO"].ToString() != a["NEWITEMNO"].ToString()) ||
(a["LABEL"].ToString() != a["NEWVISITEMNO"].ToString()))
select new ItemsToUpdate
{
isAccessory = accessories,
Item = a
}
).ToList();