2009-07-26 13 views
1

C#でエンティティフレームワークのメタデータをクエリするクエリがあります。 VB.NETに変換する必要がありますが、ASキーワードをSystem.Data.Metadata.Edm.EntityTypeのメタキャストに変換しようとしています。私はTryCast、ctype関数、キャスト、などを試してみたEntity FrameworkメタデータLINQ(C#からVB.NETへの変換)

ここでは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 

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

+0

CTypeを試したと言われました。 @ dahlbykの答えはあなたのために働くのですか? – CoderDennis

+0

だから私はあなたがCTypeを試みたと言ったことを完全に忘れてしまった。 OfType()を試してください。 :) – dahlbyk

答えて

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()にはgeneric versionがあり、希望のタイプのアイテムのみを返すと思われます。

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 
0

私はVB.NETでこのクエリを書いていた場合、私はlambdaなしでこれを行うでしょう。私は読んだほうが簡単だと思いますが、あなたがやっていることは、おそらく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 
関連する問題