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
- AutomationEvent.cs
- FileAuthorizationModule.cs
- DiagnosticTraceSource.cs
- Utils.cs
- ObjectAnimationBase.cs
- RemoteWebConfigurationHostServer.cs
- MouseButtonEventArgs.cs
- InternalCompensate.cs
- HandlerFactoryWrapper.cs
- HealthMonitoringSection.cs
- DataGridCellAutomationPeer.cs
- MemberAccessException.cs
- Figure.cs
- NativeMethods.cs
- ExecutionScope.cs
- ConsoleTraceListener.cs
- ObjectListDesigner.cs
- ServiceModelActivity.cs
- RealProxy.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- WrappedIUnknown.cs
- RIPEMD160.cs
- EntityCodeGenerator.cs
- HitTestResult.cs
- OptionUsage.cs
- Message.cs
- ContentPresenter.cs
- shaper.cs
- ThicknessAnimation.cs
- ToolStripHighContrastRenderer.cs
- X509DefaultServiceCertificateElement.cs
- UserInitiatedRoutedEventPermission.cs
- XsdBuilder.cs
- Int64.cs
- Accessible.cs
- ReadOnlyCollectionBase.cs
- BoolExpr.cs
- ReversePositionQuery.cs
- RawStylusInputCustomData.cs
- DataControlImageButton.cs
- SafeRightsManagementQueryHandle.cs
- ParameterElementCollection.cs
- ConfigurationLocation.cs
- ListBox.cs
- ContainerControl.cs
- WinEventWrap.cs
- Material.cs
- BoundField.cs
- CodeMemberEvent.cs
- ScrollItemProviderWrapper.cs
- Pen.cs
- Input.cs
- WindowsRichEditRange.cs
- StatusBar.cs
- DiagnosticTraceRecords.cs
- ControlBuilderAttribute.cs
- DragEventArgs.cs
- DocumentOrderComparer.cs
- ControlValuePropertyAttribute.cs
- IOException.cs
- StrongNamePublicKeyBlob.cs
- WaitHandleCannotBeOpenedException.cs
- HttpRuntime.cs
- EndpointAddress10.cs
- ipaddressinformationcollection.cs
- SortedList.cs
- DecimalAnimation.cs
- BamlMapTable.cs
- BaseTemplateCodeDomTreeGenerator.cs
- SecurityUtils.cs
- ComponentEvent.cs
- UpdateEventArgs.cs
- CompressedStack.cs
- TableLayoutRowStyleCollection.cs
- SSmlParser.cs
- PtsPage.cs
- ChtmlTextWriter.cs
- EmissiveMaterial.cs
- RequestCachePolicy.cs
- PtsHost.cs
- SpanIndex.cs
- GridViewSelectEventArgs.cs
- ToolStripGrip.cs
- TrustManagerMoreInformation.cs
- ProcessHostServerConfig.cs
- ViewSimplifier.cs
- UpdateException.cs
- TimeoutValidationAttribute.cs
- TraceAsyncResult.cs
- AuthenticationException.cs
- ErrorInfoXmlDocument.cs
- GridPatternIdentifiers.cs
- SqlWebEventProvider.cs
- _ConnectStream.cs
- CodeGen.cs
- PrintingPermissionAttribute.cs
- __TransparentProxy.cs
- FormatterServicesNoSerializableCheck.cs
- TemplatePartAttribute.cs
- NameValuePermission.cs