DbExpressionBuilder.SelectMany<TSelector> 方法 (DbExpression, Func<DbExpression, DbExpression>, Func<DbExpression, DbExpression, TSelector>)
[本页针对的是实体框架版本 6。最新版本以“实体框架”NuGet 包的形式提供。有关实体框架的更多信息,请参见 msdn.com/data/ef。]
创建一个新的 DbApplyExpression,它为给定输入集的每个元素计算一次给定的 apply 表达式,并生成具有相应 input 和 apply 列的行集合。 不包括 apply 计算结果为空集的行。 然后创建了 DbProjectExpression,它对每一行选择指定的 selector,并且生成结果的整个集合。
命名空间: System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder
程序集: EntityFramework(在 EntityFramework.dll 中)
语法
声明
<ExtensionAttribute> _
Public Shared Function SelectMany(Of TSelector) ( _
source As DbExpression, _
apply As Func(Of DbExpression, DbExpression), _
selector As Func(Of DbExpression, DbExpression, TSelector) _
) As DbProjectExpression
用法
Dim source As DbExpression
Dim apply As Func(Of DbExpression, DbExpression)
Dim selector As Func(Of DbExpression, DbExpression, TSelector)
Dim returnValue As DbProjectExpression
returnValue = source.SelectMany(apply, _
selector)
public static DbProjectExpression SelectMany<TSelector>(
this DbExpression source,
Func<DbExpression, DbExpression> apply,
Func<DbExpression, DbExpression, TSelector> selector
)
[ExtensionAttribute]
public:
generic<typename TSelector>
static DbProjectExpression^ SelectMany(
DbExpression^ source,
Func<DbExpression^, DbExpression^>^ apply,
Func<DbExpression^, DbExpression^, TSelector>^ selector
)
static member SelectMany :
source:DbExpression *
apply:Func<DbExpression, DbExpression> *
selector:Func<DbExpression, DbExpression, 'TSelector> -> DbProjectExpression
JScript does not support generic types and methods.
类型参数
- TSelector
selector 的方法结果类型。
参数
- source
类型:System.Data.Entity.Core.Common.CommandTrees.DbExpression
指定输入集的 DbExpression。
- apply
类型:System.Func<DbExpression, DbExpression>
一个方法,它表示要对输入集的每个成员计算一次的逻辑。
- selector
类型:System.Func<DbExpression, DbExpression, TSelector>
一个方法,它指定如何在给定输入集和应用集的元素的情况下派生结果集的元素。 此方法必须生成与 SelectMany 兼容且可以解析为 DbExpression 的类型的实例。 备注中说明了针对 TSelector 的兼容性要求。
返回值
类型:System.Data.Entity.Core.Common.CommandTrees.DbProjectExpression
一个新的 DbProjectExpression,它从具有指定输入和应用绑定且 CrossApply 为 DbExpressionKind 的一个新的 DbApplyExpression 中选择给定选择器的结果。
使用说明
在 Visual Basic 和 C# 中,可以在 DbExpression 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时,请省略第一个参数。有关详细信息,请参阅https://msdn.microsoft.com/zh-cn/library/bb384936(v=vs.113)或https://msdn.microsoft.com/zh-cn/library/bb383977(v=vs.113)。
异常
例外 | 条件 |
---|---|
ArgumentNullException | source、apply 或 selector 为 null。 |
ArgumentNullException | 由 apply 生成的表达式为 null。 |
ArgumentNullException | 在转换为 DbExpression 时 selector 的结果为 null。 |
ArgumentException | source 没有集合结果类型。 |
ArgumentException | apply 生成的表达式不具有集合类型。 |
备注
若要与 SelectMany 兼容,<typeparamref name="TSelector" /> 必须从 DbExpression 派生,或者必须是具有 DbExpression 派生的属性的匿名类型。 以下是 <typeparamref name="TSelector" /> 支持的类型的示例:<code>source.SelectMany(x => x.Property("RelatedCollection"), (source, apply) => apply.Property("Name"))</code>(<typeparamref name="TSelector" /> 是 DbPropertyExpression)。 <code>source.SelectMany(x => x.Property("RelatedCollection"), (source, apply) => new { SourceName = source.Property("Name"), RelatedName = apply.Property("Name") })</code>(<typeparamref name="TSelector" /> 是具有 DbExpression 派生的属性的匿名类型)。
请参阅
参考
System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder 命名空间