2013-08-26 35 views
1

我目前有多個方法可以做幾乎相同的事情,但只是查詢不同的表。創建一個使用linq查詢數據庫的方法

我想只使用一種方法,並傳遞方法參數,所以我可以跳過創建多個方法,並更新我的代碼。

這是我目前:

MyEntityModel entity = new MyEntityModel(); 

private void loadData() 
{ 
    var query = from data in entity.Table1 
       select data; 

    myDataGrid.ItemsSource = query.ToList(); 
} 

我想是這樣的:

MyEntityModel entity = new MyEntityModel(); 

private void loadData(DataGrid dataGrid, Table myTable) 
{ 
    var query = from data in entity.myTable 
       select data; 

    dataGrid.ItemsSource = query.ToList(); 
} 

我不確定我應該通過什麼類型的參數爲myTable的 我試圖把它當作一個System.Data.Entity.DbSet和作爲MyEntityModel

是這樣的甚至可能使用LINQ?

回答

0

您可以創建返回從提供的實體類型的DbSet實例中的所有數據的通用方法:

MyEntityModel entity = new MyEntityModel(); 

private void LoadData<T>(DataGrid dataGrid) 
    where T : class 
{  
    dataGrid.ItemsSource = entity.Set<T>().ToList(); 
} 

使用它像

LoadData<Table1>(myDataGrid); // Table1 is a entity type name 
0

雖然lazy's answer是一種選擇,另一種是接受IQueryable作爲參數:

private void LoadData<T>(DataGrid dataGrid, IQueryable<T> query) 
{ 
    dataGrid.ItemsSource = query.ToList(); 
} 

然後你會這樣稱呼它:

LoadData(dataGrid, entity.Table1);