2012-04-18 73 views
2

我希望能夠編寫和更新我的數據庫,將對象發送到我的服務,然後讓服務動態決定要寫入或更新到數據庫的對象類型。使用LINQ在運行時從數據庫獲取數據

這是靜態地做這件事的時候(更新的例子),我做什麼

switch ((string)property.GetValue(oLinq, null)) 
       { 
        case "news": 
         t_news oNews = (t_news)oLinq;        
         List<t_news> newsList = (from n in oDB.t_news where n.ID.Equals(oNews.ID) select n).ToList(); 
         t_news oNe = newsList[0]; 
         i = 0; 
         foreach (System.Reflection.PropertyInfo p in oNews.GetType().GetProperties().ToList()) 
         { 
          if (p.GetValue(oNews, null) != null) 
          { 
           typeof(t_news).GetProperties().ToList()[i].SetValue(oNe, p.GetValue(oNews, null), null); 
          } 
          i++; 
         } 
         oNe.dLastUpdate = DateTime.Now; 
         oDB.SubmitChanges(); 
         oLinq = (object)oNews; 
         break; 
return oLinq; 

ODB是我的DataContext。 oLinq只是一個包含我想要更新的數據的對象。 它包含一個字段,我在其中指定需要更新哪種表。 我使用開關箱來確定指定該表。 我現在有4種不同的情況,在這種情況下我幾乎完全相同。

但我希望能夠動態地做到這一點,所以我不必重寫所有這些代碼4次,並且能夠在將來添加新表格。

這就是我想:

List<string> alsTableNames = (from tables in oDB.Mapping.GetTables() select tables.TableName).ToList(); 
       foreach (string sTableName in alsTableNames) 
       { 
        if (String.Compare(sTableName.Substring(6), (string)property.GetValue(oLinq, null)) == 0) 
        { 
         string sBasicType = sTableName.Replace("dbo.", ""); 
         string sType = "RegisterService." + sBasicType; 
         Type tType = Type.GetType(sType); 
         oLinq = Convert.ChangeType(oLinq, tType); 

該工程的oLinq對象轉換爲類型我想要的。 但是,不起作用的是從數據庫中獲取數據以將其替換爲新數據。 基本上,我需要一種方法來做到這一點,以動態方式:

List<t_news> newsList = (from n in oDB.t_news where n.ID.Equals(oNews.ID) select n).ToList(); 
         t_news oNe = newsList[0]; 

喜歡的東西:

List<//type of the table I want> list = (from t in //table where t.//firstproperty.Equals(oLinq.getType().getProperties().toList()[0]) select t.ToList(); 
         object oNewObj = list[0]; 

什麼想法?

+0

C#泛型的列表其中T是表的類型你想 – FiveTools 2012-04-18 15:27:34

+0

列表類型是不是一個真正的問題,因爲我只想要一個對象從那個列表(與我發送的對象具有相同ID的那個oLinq對象) 因此,我可以將列表製作爲列表 theList,然後使用myObject = Convert.ChangeType更改所需對象的類型( theList [0],tType); – 2012-04-19 06:46:26

回答

0

你看過使用Dynamic LINQ

使用它,你可以做一些與此類似:

// Use reflection to figure out what type of entity you need to update 
var tYourEntityType = /* your code to get the type of the object you will be working with */; 

// Get the entity you need to update querying based on a dynamic where clause 
string propetyNameToSeach = "firstproperty"; // set this dynamically to the name of the property 
string propertyValueToCompare = "5"; // set this dynamically to the value you want to compare to 
var entityToUpdate = youDataContext.GetTable<tYourEntityType>().Where(propetyNameToSeach + " = " + propertyValueToCompare).FirstOrDefault(); 
相關問題