/// <summary> /// 根据指定类型<see cref="DbCollectionMemberExpression"/>表达式创建虚拟数据源列表语句片段。 /// </summary> /// <param name="context">生成上下文。</param> /// <param name="source">虚拟数据源</param> /// <returns>查询语句片段。</returns> public virtual SelectFragment CreateVirtualListForCollectionMember(GenerateContext context, VirtualSourceFragment source) { var content = (DbCollectionMemberExpression)source.Expression; var target = GetSource(context, content.TargetSet.Item); var container = source.Container; if (container.IsRecommandLock) { container = container.Parent as SelectFragment; } var list = new SelectFragment(context, target); if (content.Metadata.IsComposite) { GenerateVirtualCompositeJoinForCollectionMember(context, content, list, true); } container.AddSource(list); GenerateVirtualJoinForCollectionMember(context, source, list, false); list.RetrievalMembers(content.TargetSet.Item, false); if (IsSelectFragment(content)) { context.RegisterTempSource(content.Item, target, delegate() { list = InitialSelectFragment(list, content); }); } return(list); }