0

MVC3、C#、Razor、.NET4、EF5、SQL Server 2008 を使用しています。

ドメイン オブジェクトのプロパティの型を調べる必要があります。特に、それが ICollection であるか、Navigation Property であるか、単純な POCO 型であるか (int、string など) を調べる必要があります。

基本的に、View から Domain オブジェクトにマッピングしており、ナビゲーション プロパティ (ICollection) を除外する必要があります。Value Injector を使用しており、ICollection を無視するカスタム インジェクターを作成できます。

私が信じている「TypeOf」機能があります。

したがって、私の擬似ロジックは次のようになります。

Match if not(typeOf(ICollection))

どうもありがとう。

編集:

最初の解決策を試しましたが、うまくいきませんでした。以下サンプルコード。すべて true を返します。isCollection1 と 2 が false で、3 と 4 が true だと思います。

考え?

        bool isCollection2 = stdorg.Id is System.Collections.IEnumerable;
        bool isCollection3 = stdorg.StdLibraryItems is System.Collections.IEnumerable;

EDIT2:

これは私のために働く:

bool IsCollection = (stdorg.StdLibraryItems.GetType().Name == "EntityCollection`1")

Value Injector は、実際に使用する必要がありました。

bool IsCollection = (stdorg.StdLibraryItems.GetType().Name == "ICollection`1")

そしてこれは御馳走になります。興味のある人のために、Value Injector にはマッチング ルーチンがあり、この条件を設定すると、一致が true を返すかどうかが決まります。一致する場合は、Target プロパティ値を Source プロパティ値の値に設定します。

4

2 に答える 2

1

彼は、他のプロパティの問題も解決できる一般的なタイプのソリューションです。特に何かがnull可能である場合。

    foreach (var propertyInfo in typeof (T).GetProperties()) { //<< You know about typeof T already
          var propType = UnderLyingType(propInfo); 
          //if( decide if collection?){}
    }


    public Type UnderLyingType(PropertyInfo propertyInfo) {
        return Nullable.GetUnderlyingType(propertyInfo.PropertyType) 
               ?? propertyInfo.PropertyType;
    }

PropInfo で利用可能な情報も確認することをお勧めします。

于 2013-08-11T18:16:26.647 に答える