gpt4 book ai didi

c# - 如何使用linq在where子句中设置条件过滤器?

转载 作者:太空宇宙 更新时间:2023-11-03 19:41:26 26 4
gpt4 key购买 nike

我有一个名为 accessories 的 bool 条件

如果为真,那么我想确保单元格值不为空否则它可以是空的。我有以下内容:

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();

问题:好吧,简单地说,使用上面的方法时它不能正确过滤。

ITEMNO cell, `NEWITEMNO` cell are the same , LABEL cell and `NEWVISITEMNO` cell are also the same 

然后这应该会给我一个包含 0 个项目的列表,但我的列表中仍然有项目。

我做错了什么?

编辑:

修改后的代码:

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();

还是过滤错误。

最佳答案

这就是您没有得到正确结果的原因。这种情况:

where accessories == true ?  a["MASTERID"].ToString() != "": a["MASTERID"].ToString() == "" &&
a["ITEMNO"].ToString() != a["NEWITEMNO"].ToString() ||
a["LABEL"].ToString() != a["NEWVISITEMNO"].ToString()

意思是:

如果 accessories 为真,则检查 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。您在问题中编辑的代码没有任何区别,它仍然与上面的意思相同。

现在您的问题是,为什么 Enigmativity 的答案会给您正确的结果。他是这样的:

where accessories ? a["MASTERID"].ToString() != "" : true
where a["ITEMNO"].ToString() != a["NEWITEMNO"].ToString() || a["LABEL"].ToString() != a["NEWVISITEMNO"].ToString()

这意味着:

如果 accessories 为真,则检查 MASTERID 是否不为空。否则使用值 true。此外,检查以确保 ITEMNO 与 NEWITEMNO 不同或 LABEL 与 NEWVISITITEMNO 不同。

所以本质上它是这样做的:

(accessories ? a["MASTERID"].ToString() != "" : true)
&&
(
a["ITEMNO"].ToString() != a["NEWITEMNO"].ToString() ||
a["LABEL"].ToString() != a["NEWVISITEMNO"].ToString()
)

我不知道您的全部要求,但恐怕即使是 Enigmativity 的回答也可能会产生错误的结果(或可能不会)。这完全取决于您何时会遇到具体情况。也许,我的解释可以为您提供指导。

关于c# - 如何使用linq在where子句中设置条件过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52760428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com