我有脚本:
select
fk.name,
object_name(fk.parent_object_id) 'Parent table',
c1.name 'Parent column',
object_name(fk.referenced_object_id) 'Referenced table',
c2.name 'Referenced column'
from
sys.foreign_keys fk
inner join
sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
inner join
sys.columns c1 ON fkc.parent_column_id = c1.column_id and c1.object_id = fkc.parent_object_id
inner join
sys.columns c2 ON fkc.referenced_column_id = c2.column_id and c2.object_id = fkc.referenced_object_id
而且我知道我得到的结果有5列。是否有一种灵活而有效的方法将此数据存储在linq类型对象或iQueryable对象中?我希望能够遍历它...
答案 0 :(得分:1)
有一些ORMs使用了IQueryable:Entity Framework,LINQ to SQL,NHibernate,Subsonic等。我建议尝试一下。
答案 1 :(得分:1)
对于very lightweight ORM,您可以使用DataContext的ExecuteQuery
:
class YourRow
{
public string Col1 { get; set; }
public string Col2 { get; set; }
...
}
// DataContext takes a connection string as parameter
var db = new DataContext("Data Source=myServerAddress;" +
"Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;");
var rows = db.ExecuteQuery<YourRow>(@"
select fk.name,
object_name(fk.parent_object_id) 'Parent table',
...
");
如果可以在视图中存储SQL查询,可以将视图拖到DBML文件中,让LINQ为您创建包装类。
答案 2 :(得分:0)
如果使用DbCommand和DataReader执行此脚本,则可以迭代返回的行,并将它们添加到将保存5列的自定义对象列表中。
然后,您可以使用Linq To Objects过滤列表。
或者您可以使用ORM将实体映射到数据库。如果为查询创建数据库视图,则可以使用例如实体框架将实体映射到视图,并使用它来执行进一步的查询。
答案 3 :(得分:0)
您可以将其存储到DataTable中。您已在项目中添加程序集System.Data.Extensions以将DataTable用作IQueryable。
from tbl in dataTable.AsEnumerable()
//where clause
select tbl;
DataView view = tbl.AsDataView();