2011-11-03 55 views
0

我有腳本:如何從sql使用c#封裝這些數據?

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對象中存儲這些數據的方法是否靈活有效?我希望能夠通過它來遍歷...

+1

有很多方法。你問哪個ORM最好?這太開放了...... – RedFilter

+2

你使用EF/Linq2SQL嗎?或「純」的ADO.NET? – Yahia

回答

0

如果您通過使用DbCommand和DataReader執行此腳本,則可以遍歷返回的行並將它們添加到將包含5列的自定義對象的列表中。

然後,您可以使用Linq To Objects來更多地過濾列表。

或者您可以使用ORM將您的實體映射到數據庫。如果爲查詢創建數據庫視圖,則可以使用Entity Framework將實體映射到視圖,並使用該視圖執行進一步的查詢。

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創建包裝類您。

0

您可以將其存儲到DataTable中。您已經在項目中添加了組件System.Data.Exetensions,以便將DataTable用作IQueryable。

from tbl in dataTable.AsEnumerable() 
//where clause 
select tbl; 

DataView view = tbl.AsDataView();