Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / DynamicData / DynamicData / ModelProviders / DLinqTableProvider.cs / 1305376 / DLinqTableProvider.cs
using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data.Linq.Mapping; using System.Linq; using System.Linq.Expressions; using System.Reflection; namespace System.Web.DynamicData.ModelProviders { internal sealed class DLinqTableProvider : TableProvider { private ReadOnlyCollection_roColumns; private List _columns; private MetaType _rowType; private PropertyInfo _prop; public DLinqTableProvider(DLinqDataModelProvider dataModel, MetaType rowType, string name, PropertyInfo prop) : base(dataModel) { _prop = prop; _rowType = rowType; Name = name; DataContextPropertyName = prop.Name; EntityType = rowType.Type; ParentEntityType = rowType.InheritanceBase != null ? rowType.InheritanceBase.Type : null; RootEntityType = rowType.Table.RowType.Type; _columns = new List (); var members = new List (rowType.DataMembers); // Add in base-class-first order (not the typical derived-class-first order) foreach (PropertyInfo propInfo in GetOrderedProperties(rowType.Type)) { MetaDataMember member = members.FirstOrDefault(m => m.Member.Name == propInfo.Name); if (member != null) { AddColumn(dataModel, member, propInfo); members.Remove(member); } } // Anything we might've missed, tack it onto the end foreach (MetaDataMember member in members) { AddColumn(dataModel, member, (PropertyInfo)member.Member); } _roColumns = new ReadOnlyCollection (_columns); } private void AddColumn(DLinqDataModelProvider dataModel, MetaDataMember member, PropertyInfo propInfo) { var publicGetAccessor = propInfo.GetGetMethod(); if (publicGetAccessor == null) { // the property at least needs to have a public getter, otherwise databinding will not work return; } DLinqColumnProvider column = new DLinqColumnProvider(this, member); _columns.Add(column); if (!dataModel.ColumnLookup.ContainsKey(propInfo)) dataModel.ColumnLookup[propInfo] = column; } private IEnumerable GetOrderedProperties(Type type) { if (type == null) return new PropertyInfo[0]; PropertyInfo[] props = type.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance); return GetOrderedProperties(type.BaseType).Concat(props); } internal void Initialize() { _columns.ForEach(c => ((DLinqColumnProvider)c).Initialize()); _columns.RemoveAll(c => ((DLinqColumnProvider)c).ShouldRemove); } #region IEntity Members public override IQueryable GetQuery(object context) { return (IQueryable)_prop.GetValue(context, null); } public override ReadOnlyCollection Columns { get { return _roColumns; } } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Sql8ExpressionRewriter.cs
- PropertyMetadata.cs
- EventLog.cs
- BlockingCollection.cs
- MarshalByRefObject.cs
- GlobalItem.cs
- NativeActivityAbortContext.cs
- XmlSchemaSimpleContentExtension.cs
- ContractComponent.cs
- StateDesigner.Helpers.cs
- WindowsGraphics.cs
- DataTableMapping.cs
- OdbcInfoMessageEvent.cs
- ValidateNames.cs
- RunClient.cs
- Membership.cs
- BamlBinaryWriter.cs
- XmlRootAttribute.cs
- UriTemplateTable.cs
- SizeChangedInfo.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- CompiledRegexRunner.cs
- Int32Animation.cs
- BaseConfigurationRecord.cs
- ResourceType.cs
- XmlNamespaceManager.cs
- DataRelationPropertyDescriptor.cs
- SqlDataSourceStatusEventArgs.cs
- rsa.cs
- _AutoWebProxyScriptEngine.cs
- VisualTarget.cs
- AppDomainManager.cs
- ICspAsymmetricAlgorithm.cs
- ProtectedConfiguration.cs
- DataGridViewEditingControlShowingEventArgs.cs
- BinaryOperationBinder.cs
- _ListenerResponseStream.cs
- BaseDataListComponentEditor.cs
- RegistryKey.cs
- SetState.cs
- VoiceObjectToken.cs
- FlowDocumentReader.cs
- WebExceptionStatus.cs
- NullRuntimeConfig.cs
- CustomError.cs
- FormattedText.cs
- XmlHierarchicalEnumerable.cs
- TrustManagerMoreInformation.cs
- QuaternionAnimationUsingKeyFrames.cs
- MailDefinition.cs
- LocalTransaction.cs
- VerticalAlignConverter.cs
- CapabilitiesRule.cs
- SelectionPattern.cs
- PassportIdentity.cs
- BoolLiteral.cs
- DebuggerAttributes.cs
- AggregationMinMaxHelpers.cs
- BaseContextMenu.cs
- TypeAccessException.cs
- WorkflowMarkupSerializer.cs
- GridViewSortEventArgs.cs
- RuntimeResourceSet.cs
- bidPrivateBase.cs
- PermissionListSet.cs
- SessionSymmetricTransportSecurityProtocolFactory.cs
- JsonQueryStringConverter.cs
- ParameterSubsegment.cs
- XmlHierarchyData.cs
- CompiledQuery.cs
- CursorConverter.cs
- DesignSurfaceEvent.cs
- MaskedTextBoxDesignerActionList.cs
- SourceFilter.cs
- SystemThemeKey.cs
- BlockCollection.cs
- ConstructorExpr.cs
- util.cs
- WindowsProgressbar.cs
- XmlLoader.cs
- XPathScanner.cs
- XPathSingletonIterator.cs
- HuffModule.cs
- SqlDataReaderSmi.cs
- FunctionParameter.cs
- diagnosticsswitches.cs
- ObjectIDGenerator.cs
- HealthMonitoringSection.cs
- ThicknessAnimation.cs
- KeyConverter.cs
- GPRECTF.cs
- BezierSegment.cs
- AliasExpr.cs
- XmlCharacterData.cs
- SolidColorBrush.cs
- EncodingTable.cs
- XmlValidatingReaderImpl.cs
- KeyedHashAlgorithm.cs
- SecurityException.cs
- DiscoveryReferences.cs