实体框架元数据LINQ(从C#转换为VB.NET)

实体框架元数据LINQ(从C#转换为VB.NET),linq,entity-framework,metadata,entity,Linq,Entity Framework,Metadata,Entity,我在C#中有一个查询,用于查询实体框架的元数据。我需要将其转换为VB.NET,但我正在努力将AS关键字转换为“cast”meta,转换为System.Data.Metadata.Edm.EntityType。我试过TryCast、CType、Cast等等 下面是C#中的查询: 这是我最近一次在VB.NET中编译它(带下划线的As关键字表示“'),预期: Dim query2 = _ From meta In entityObjectContext.MetadataWor

我在C#中有一个查询,用于查询实体框架的元数据。我需要将其转换为VB.NET,但我正在努力将AS关键字转换为“cast”meta,转换为System.Data.Metadata.Edm.EntityType。我试过TryCast、CType、Cast等等

下面是C#中的查询:

这是我最近一次在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

这简直要了我的命。我很接近……

您可以使用CType键入cast:

...
From p In CType(meta, System.Data.Metadata.Edm.EntityType).Properties _
...
更新:再次查看查询,我建议使用:

更新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

如果我在VB.NET中编写这个查询,我会在没有lambdas的情况下这样做。我认为它更容易阅读,但他们的做法可能会让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

你说你试过CType。@dahlbyk的答案对你有用吗?所以我完全没有听到你说你试过CType。尝试键入()。:)
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
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