1

Entity Frameworkのメタデータをクエリするために機能しているC#のクエリがあります。VB.NETに変換する必要がありますが、ASキーワードをSystem.Data.Metadata.Edm.EntityTypeに「キャスト」メタに変換するのに苦労しています。TryCast、CType、Castなどを試しました。

C#でのクエリは次のとおりです。

var queryResult = from meta in oc.MetadataWorkspace.GetItems(System.Data.Metadata.Edm.DataSpace.CSpace)
                  .Where(m => m.BuiltInTypeKind == System.Data.Metadata.Edm.BuiltInTypeKind.EntityType)
                                  from p in (meta as System.Data.Metadata.Edm.EntityType).Properties
                                  .Where(p => p.DeclaringType.Name == entityClassType.Name
                                  && p.Name == propertyName)
                                  select p;

これは、VB.NETでコンパイルするために私が到達した最も近いものです(下線が引かれ、「)」と表示されているAsキーワードは次のとおりです。

Dim query2 = _
             From meta In entityObjectContext.MetadataWorkspace.GetItems(System.Data.Metadata.Edm.DataSpace.CSpace) _
                  .Where(Function(m) m.BuiltInTypeKind = System.Data.Metadata.Edm.BuiltInTypeKind.EntityType) _
                  From p In (meta As System.Data.Metadata.Edm.EntityType).Properties _
                  .Where(Function(p) p.DeclaringType.Name = entity.GetType().Name _
                         And p.Name = propertyName) _
                  Select p

これは私を殺しています。私はとても近いです...

4

2 に答える 2

2

CTypeを使用して型キャストを行うことができます。

...
From p In CType(meta, System.Data.Metadata.Edm.EntityType).Properties _
...

更新:クエリをもう一度見てみると、代わりにOfType()を使用することをお勧めします。

From meta In entityObjectContext.MetadataWorkspace.GetItems(System.Data.Metadata.Edm.DataSpace.CSpace) _
             .OfType(Of System.Data.Metadata.Edm.EntityType)() _
From p In meta.Properties _
Where p.DeclaringType.Name = entity.GetType().Name _
    And p.Name = propertyName _
Select p

更新2:また、GetItems()には、目的のタイプのアイテムのみが返されると思われる汎用バージョンがあるようです。

From meta In entityObjectContext.MetadataWorkspace.GetItems(Of System.Data.Metadata.Edm.EntityType)(System.Data.Metadata.Edm.DataSpace.CSpace) _
From p In meta.Properties _
Where p.DeclaringType.Name = entity.GetType().Name _
    And p.Name = propertyName _
Select p
于 2009-07-26T05:09:43.010 に答える
0

このクエリをVB.NETで記述している場合、ラムダなしでこのように記述します。読みやすいと思いますが、C#開発者にとっては読みやすいでしょう。

Dim query2 = _
    From meta In entityObjectContext.MetadataWorkspace.GetItems(System.Data.Metadata.Edm.DataSpace.CSpace) _
        Where m.BuiltInTypeKind = System.Data.Metadata.Edm.BuiltInTypeKind.EntityType _
            From p In CType(meta, System.Data.Metadata.Edm.EntityType).Properties _
                Where p.DeclaringType.Name = entity.GetType().Name _
                     And p.Name = propertyName) _
            Select p
于 2009-07-26T05:43:50.240 に答える