2014-10-09 107 views
0

我在寫一個函數來更新表(SQLite)中的一行。有一次我只需要更新該行的某些列。使用foreach屬性的類

我的視頻類(和表)具有以下屬性(和列): Id,Name,Lyric,Cover,Gendre,Url。 (他們所有的字符串)

現在,例如,我需要更新的歌詞和表1排的掩護下,我使用這個代碼:

string id = // still keep the old id, this's the PK of table; 
string lyric = //get new lyric; 
string cover = // get new cover; 
Video item = new Video(){Id = id, Lyric = lyric, Cover = cover}; 
SQLiteAccess.EditVideoInfo(item); 

這裏的EditVideoInfo

public static void EditVideoInfo(Video item) 
    { 
     var conn = new SQLiteConnection(mypath); 
     using (conn) 
     { 
      var list = conn.Query<Video>("SELECT * FROM Video WHERE Id =?", item.Id); 
      if (list.Count >0) 
      { 
       var editItem = list.First(); // -> Get the item need to updated 
       /// Here's where I'm stuck 
       conn.Update(editItem);      
      } 
     } 
    } 

那麼如何讀取「foreach」新項目的每個屬性並更新爲舊項目的屬性(如果該屬性不爲null)?

回答

1

像下面的東西。

var props = typeof(Video).GetProperties(BindingFlags.Instance|BindingFlags.Public|BindingFlags.GetProperty|BindingFlags.SetProperty); 

foreach (var prop in props) { 
    var propVal = prop.GetValue(item, null); 
    if (propVal != null) 
     prop.SetValue(editItem, propVal, null); 
} 
+0

它的作品完美地重複!非常感謝你:D – user3448806 2014-10-09 12:00:34

0

我的第一個做到這一點的方法是創建一個dictionary

Dictionary<string, string> _properties = new Dictionary<string, string>(); 
_properties["id"] = "myID" 
_properties["lyric"] = "some other string" 

,然後你可以通過它在foreach

foreach (var prop in _properties) 
{ 
    // do something with prop 
}