以 OR 方式将 IQueryable 链接在一起

Chaining together IQueryable in an OR fashion

我有一些 IQueryable,我想一起进行 OR。我的理解是使用 Where 将它们链接在一起,结果将它们组合在一起(尽管我的理解可能有误。)

这是一个查询示例,我想用 OR 组合在一起,而不是使用所有链式 Where 子句:

var query = query.Where(x => x.Value == 1)
                              .Where(x => x.Name == name);

相反,我正在寻找类似的东西:

var query = query.Where(x => x.Value == 1)
                  .Or(x => x.Name == name)
                  .Or(x => x.SomeOtherValue == something else)
                  .Or(x => x.AChildObject.Items.Where(item => item.SomeValue == yet something else));

...在我的例子中,我可能需要像上面那样将 10 个或多个项目链接在一起。

我一直在查看 this one 之类的帖子,我想我可以使用一系列 || 语句将事物链接在一起,但我不确定这是否可行。它可能会变得很难阅读。

在网上研究这个过程中,我 运行 阅读了关于 PredicateBuilders 等内容丰富的文章。我无论如何都不是 LINQ 方面的专家,我希望得到一些指导?

看来你可以只使用 OR 运算符。

var query = query.Where(x => x.Value == 1
                  || x.Name == name)
                  || x => x.SomeOtherValue == something else)
                  || x => x.AChildObject.Items.Where(item => item.SomeValue == yet something else))

如果合并来自不同来源的数据,您也可以使用 Union 或 Concat,请参阅 Linq union usage?