C# 使用实体框架,如何创建一个从数据库中获取所有表的列名的查询

C# 使用实体框架,如何创建一个从数据库中获取所有表的列名的查询,c#,.net,entity-framework,ienumerable,generic-list,C#,.net,Entity Framework,Ienumerable,Generic List,如何使用Entity Framework在C中创建一个动态选择查询,该查询将从SQL数据库中获取所有列名。这里,查询中要提供的表名是从IEnumerable类型的通用列表中获取的 有一个列表mylist,其中索引[0]有表名存储,在索引[1]有一个表地址,[2]有一个表国家。现在,需要向数据库激发查询,以找出Store、Address和Country表的所有列名 我想,最后的查询应该按以下方式进行: select mylist[0].1stcolumnname, myli

如何使用Entity Framework在C中创建一个动态选择查询,该查询将从SQL数据库中获取所有列名。这里,查询中要提供的表名是从IEnumerable类型的通用列表中获取的

有一个列表mylist,其中索引[0]有表名存储,在索引[1]有一个表地址,[2]有一个表国家。现在,需要向数据库激发查询,以找出Store、Address和Country表的所有列名

我想,最后的查询应该按以下方式进行:

select    
    mylist[0].1stcolumnname,
    mylist[0].2ndcolumnname,
    .....,
    mylist[1].1stcolumnname,
    mylist[1].2ndcolumnname, ....,
    mylist[2].1stcolumnname,
    mylist[2].2ndcolumnname, 
    .... 
from 
    SOMETABLENAME WITH JOINS" 
如果正确获取了这些结果,那么要激发的最终输出查询将如下所示

Select 
    "Store.id", "Store.Name", "Store.gstno", "Store.addressId",  
    "Address.addressId", "Address.addressLine1", "Address.addressLine2", 
    "Address.postcode", "Address.countryId", 
    "Country.countryId", "Country.name"
from 
    SOMETABLENAME WITH JOINS;
正如您在这里看到的,每个表名和每个列名都会被提取并创建查询。

使用这个:

   using (var db = new EFDemoContext())
            {
                var columnNames = db.Database.SqlQuery<string>(" SELECT T.name + '.' + C.name AS Name
           FROM   sys.objects AS T
           JOIN sys.columns AS C ON T.object_id = C.object_id
           JOIN sys.types AS P ON C.system_type_id = P.system_type_id
           WHERE  T.type_desc = 'USER_TABLE'  and T.name not like  N'%sysdiagrams%';").ToList();
            }
使用这个:

   using (var db = new EFDemoContext())
            {
                var columnNames = db.Database.SqlQuery<string>(" SELECT T.name + '.' + C.name AS Name
           FROM   sys.objects AS T
           JOIN sys.columns AS C ON T.object_id = C.object_id
           JOIN sys.types AS P ON C.system_type_id = P.system_type_id
           WHERE  T.type_desc = 'USER_TABLE'  and T.name not like  N'%sysdiagrams%';").ToList();
            }

如果您在同一个项目中使用EntityFramework和原始SQL查询,您可能会做错事。实际上,我必须使用entity framework从通用列表中获取表的列名,并将它们放入列表中,以便对其进行索引以创建动态选择sql查询,就像我在问题中提到的那样我不知道动态选择sql查询是什么意思,但是如果EF Core with:var allsotreswithAddresses and Countries included=dbContext.Stores.Includes=>s.Address.thenCludea=>a.Country.ToList,则可以查询您问题中的示例;如果您在同一个项目中使用EntityFramework和原始SQL查询,您可能会做错事。实际上,我必须使用entity framework从通用列表中获取表的列名,并将它们放入列表中,以便对其进行索引以创建动态选择sql查询,就像我在问题中提到的那样我不知道动态选择sql查询是什么意思,但是如果EF Core with:var allsotreswithAddresses and Countries included=dbContext.Stores.Includes=>s.Address.thenCludea=>a.Country.ToList,则可以查询您问题中的示例;不工作时,列表应具有tablename.columnname之类的值,因此,如果我获取列表的索引,则输出应为[0]处的store.id、[1]处的store.Name等等。如果您可以更改选择并使用所需的每一列,请编辑我的答案,然后重试。我在数据库中还有一个DB视图,它也从该视图中获取列。如何排除视图?我有一个名为GetMetaData的视图。此外,还会获取其他列,如sysdiams.definition、sysdiams.diagram\u id、sysdiagrams.name、sysdiagrams.principal\u id、sysdiagrams.version这一次未获取视图,但仍会获取这些列sysdiagrams.definition sysdiagrams.diagram\u id sysdiagrams.name sysdiagrams.principal\u id sysdiagrams.versionies,我只需要驻留在数据库中的表的列名。不需要视图和系统图表。就像我的数据库中有store、address和country表一样。因此,只应获取这些列。如果不起作用,列表应具有tablename.columnname之类的值,因此,如果我获取列表的索引,则输出应为[0]处的store.id、[1]处的store.Name等。如果您可以更改选择并使用所需的每一列,我将编辑我的答案,然后重试。我在数据库中还有一个DB视图,它也在从视图中提取柱。如何排除视图?我有一个名为GetMetaData的视图。此外,还会获取其他列,如sysdiams.definition、sysdiams.diagram\u id、sysdiagrams.name、sysdiagrams.principal\u id、sysdiagrams.version这一次未获取视图,但仍会获取这些列sysdiagrams.definition sysdiagrams.diagram\u id sysdiagrams.name sysdiagrams.principal\u id sysdiagrams.versionies,我只需要驻留在数据库中的表的列名。不需要视图和系统图表。就像我的数据库中有store、address和country表一样。因此,只应获取这些列。