如何使用Entity Framework在C#中创建动态选择查询,该实体框架将从SQL数据库中获取所有列名。这里,查询中提供的表名是从IEnumerable<string>
类型的通用列表中获取的
有一个列表mylist
,其中index [0]的表名为Store
,索引[1]有一个表Address
,在[2]有一个表Country
。现在,需要向数据库触发查询,以找出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();
}