【发布时间】:2016-11-23 20:49:06
【问题描述】:
我有一行代码使用 where:
codebase.Methods.Where(x => x.Body.Scopes.Count > 5);
如何插入多个条件?所以我可以说x => predicate && y => predicate?
谢谢
【问题讨论】:
标签: c#
我有一行代码使用 where:
codebase.Methods.Where(x => x.Body.Scopes.Count > 5);
如何插入多个条件?所以我可以说x => predicate && y => predicate?
谢谢
【问题讨论】:
标签: c#
如果您愿意,可以将单独的条件合并到一个谓词中:
codebase.Methods.Where(x => (x.Body.Scopes.Count > 5) && (x.Foo == "test"));
或者您可以对每个条件使用单独的Where 调用:
codebase.Methods.Where(x => x.Body.Scopes.Count > 5)
.Where(x => x.Foo == "test");
【讨论】:
Where 调用都会产生少量额外开销(方法调用、委托调用等)。不过,在任何正常的日常情况下,我都不会担心这一点。
不,您不能在同一个地方定义 2 个委托,但您可以在彼此之后构建或将两者置于相同的条件下,像这样
var result = codebase.Methods.Where(x => x.Body.Scopes.Count > 5 && x.Body.Scopes.name == "" );
or
var result = codebase.Methods.Where(x => x.Body.Scopes.Count > 5 )
.where( y=> y.Body.Scopes.name == '' );
or
var result = codebase.Methods.Where(x => x.Body.Scopes.Count > 5 )
.Union( codebase.Methods.Where(y => y.Body.Scopes.name == '' ) );
【讨论】:
在您的示例中,y 来自哪里? Where 方法采用带有单个输入参数的 lambda,它表示您正在操作的序列的单个实例。
当然,您可以针对x 设置多个条件:
Where(x => x.Foo > 5 && x.Bar < 3)
【讨论】:
“y”代表什么?
您可以只使用标准的 && 条件。不需要“y”:
codebase.Methods.Where(x => x.Body.Scopes.Count > 5 && x.Body.SomethingElse < 14);
【讨论】:
我不明白。有什么不能做的?
codebase.Methods.Where(x => x.Head.IsHairy && x.Body != null && x.Body.Scopes.Count > 5);
【讨论】:
像这样..
codebase.Methods.Where(x => x.Body.Scopes.Count > 5 && x.Body.Scopes.Count < 10);
【讨论】:
codebase.Methods.Where(x => x.Body.Scopes.Count > 5).Where(x => x.Body.Scopes.TypeName == "Scopes").Where(x => x.Body.Scopes.Level == LEVEL_HIGH);
【讨论】: