c# - 通过另一个条件更改 LINQ 中的条件

标签 c# linq conditional-statements

我有这两条 LINQ 行,它们仅在一种情况下不同。

node.Image.Tag == nullnode.Image.Tag != null

if (treeSelectedNode.Image.Tag == null) 
  {
    radNode = tree.Find(node => node.Level == 0 && node.Image.Tag == null 
                           && node.Text.Equals(treeSelectedNode.Text));
  }
else 
  {
    radNode = tree.Find(node => node.Level == 0 && node.Image.Tag != null 
                           && node.Text.Equals(treeSelectedNode.Text));
  }

有没有办法在 LINQ 行之前创建条件然后使用它,以便我可以删除多余的行?

我知道我可以做这样的事情:

radNode = treeSelectedNode.Image.Tag == null ? tree.Find(node => node.Level == 0 
            && node.Image.Tag == null && node.Text.Equals(treeSelectedNode.Text)) : 
                tree.Find(node => node.Level == 0 && node.Image.Tag != null 
                        && node.Text.Equals(treeSelectedNode.Text));

但这不是我想要的。

最佳答案

检查条件 node.Image.Tag == null 的结果是否与 treeSelected.Image.Tag == null 的结果相同:

radNode = tree.Find(node => node.Level == 0 && ((node.Image.Tag == null) == (treeSelectedNode.Image.Tag == null)) 
    && node.Text.Equals(treeSelectedNode.Text))

更新

部分解决@KhanTo 的性能问题:

Boolean selectedImgTagIsNull  = treeSelected.Image.Tag == null;
radNode = tree.Find(node => node.Level == 0 && ((node.Image.Tag == null) == selectedImgTagIsNull)
    && node.Text.Equals(treeSelectedNode.Text))

但是,我怀疑即使对于我的原始代码,JIT 优化也很有可能产生相同的结果。

关于c# - 通过另一个条件更改 LINQ 中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30147990/

相关文章:

c# - 调试本地 IIS Web 服务器上托管的 ASP.NET MVC3 应用程序

.net - LINQ 到 SQL : is there a complete list of supported IQueryable extension methods?

c# - 在运行时生成类

c# - 如何在 Asp.Net MVC 6 中检索 AppSettings 配置?

c# - 为什么使用此 Linq to Sql 方法会出现 InvalidOperationException?

c# - 如何对字符串列表的列表进行排序

python - Pandas :如何计算组内的条件滚动/累积最大值

javascript - 使用 if 语句检查元素是否显示 : block jquery

java - 三元条件表达式中出现奇怪的 NullPointerException

c# - 如何在Windows Azure中删除blob