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
- DesignerSerializationOptionsAttribute.cs
- CodeArgumentReferenceExpression.cs
- InternalsVisibleToAttribute.cs
- PlaceHolder.cs
- TreeBuilder.cs
- LinearKeyFrames.cs
- RedistVersionInfo.cs
- ModulesEntry.cs
- CqlQuery.cs
- SecurityVerifiedMessage.cs
- FormViewModeEventArgs.cs
- XmlSchemaSimpleContentRestriction.cs
- _CacheStreams.cs
- SqlUtils.cs
- WebHttpSecurityModeHelper.cs
- Types.cs
- DSASignatureFormatter.cs
- EntitySetBaseCollection.cs
- Base64Encoder.cs
- _DisconnectOverlappedAsyncResult.cs
- HttpServerUtilityBase.cs
- SafeArrayRankMismatchException.cs
- ScrollableControlDesigner.cs
- DataGridRow.cs
- SqlFileStream.cs
- FtpWebResponse.cs
- VectorValueSerializer.cs
- Visual.cs
- ErrorProvider.cs
- EntityDataSourceChangedEventArgs.cs
- TextEditorCharacters.cs
- PerfCounters.cs
- SystemColors.cs
- RotationValidation.cs
- XmlILConstructAnalyzer.cs
- SortedList.cs
- MouseGesture.cs
- HttpWriter.cs
- FileDialog_Vista.cs
- HttpDebugHandler.cs
- DataViewManagerListItemTypeDescriptor.cs
- MessageUtil.cs
- BamlMapTable.cs
- WebHttpEndpointElement.cs
- XhtmlTextWriter.cs
- BaseDataList.cs
- SiteMapHierarchicalDataSourceView.cs
- X509Certificate2.cs
- XDeferredAxisSource.cs
- Span.cs
- DoubleCollectionConverter.cs
- ScrollChangedEventArgs.cs
- XmlSchemaException.cs
- KoreanLunisolarCalendar.cs
- Stack.cs
- NamedElement.cs
- latinshape.cs
- TransactionScopeDesigner.cs
- ProviderConnectionPoint.cs
- _emptywebproxy.cs
- WebHostUnsafeNativeMethods.cs
- SmtpClient.cs
- ListenerSessionConnectionReader.cs
- ConcurrentQueue.cs
- SimpleWebHandlerParser.cs
- SoapExtension.cs
- XmlSigningNodeWriter.cs
- Boolean.cs
- ContentPlaceHolder.cs
- EncoderParameter.cs
- Point4D.cs
- DefaultBindingPropertyAttribute.cs
- WebPermission.cs
- HandlerWithFactory.cs
- XmlAnyElementAttributes.cs
- CategoryGridEntry.cs
- CursorInteropHelper.cs
- ExpressionValueEditor.cs
- RequestValidator.cs
- EventOpcode.cs
- GridItem.cs
- SelectionEditor.cs
- CheckBoxStandardAdapter.cs
- HiddenFieldPageStatePersister.cs
- ExpandCollapseProviderWrapper.cs
- RsaKeyIdentifierClause.cs
- CodeIdentifiers.cs
- ScriptReference.cs
- RadioButtonList.cs
- RequiredAttributeAttribute.cs
- OdbcException.cs
- SoundPlayer.cs
- HttpRawResponse.cs
- DataGridItemCollection.cs
- GenericAuthenticationEventArgs.cs
- ButtonField.cs
- AuthorizationSection.cs
- PageWrapper.cs
- ScrollViewerAutomationPeer.cs
- TreeNodeBindingCollection.cs