使用 Entity Framework,如何创建将从数据库中获取所有表的列名的查询
Using Entity Framework, how to create a query which will fetch the column names of all tables from a database
如何使用 Entity Framework 在 C# 中创建动态 select 查询,它将从 SQL 数据库中获取所有列名。在这里,要在查询中提供的 table 名称是从 IEnumerable<string>
类型的通用列表中获取的
有一个列表 mylist
,其中索引 [0] 具有 table 名称 Store
,在索引 [1] 处有一个 table Address
在 [2] 处有一个 table Country
。现在,需要将查询发送到数据库以找出 Store
、Address
和 Country
table 的所有列名。
我假设,最终的查询应该以下面的方式进行——
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;
正如您在此处看到的,每个 table 名称和每个列名称都被提取并创建了查询。
使用这个:
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();
}
如何使用 Entity Framework 在 C# 中创建动态 select 查询,它将从 SQL 数据库中获取所有列名。在这里,要在查询中提供的 table 名称是从 IEnumerable<string>
有一个列表 mylist
,其中索引 [0] 具有 table 名称 Store
,在索引 [1] 处有一个 table Address
在 [2] 处有一个 table Country
。现在,需要将查询发送到数据库以找出 Store
、Address
和 Country
table 的所有列名。
我假设,最终的查询应该以下面的方式进行——
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;
正如您在此处看到的,每个 table 名称和每个列名称都被提取并创建了查询。
使用这个:
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();
}