2012-01-26 52 views
0

我必須加載和使用我的數據從數據庫。數據表示如下:爲我的數據採集集合

group_id term 
1   hello 
1   world 
1   bye 
2   foo 
2   bar 

etc. 

什麼是一個好的C#集合來加載和使用這些數據?

+0

除了數據本身之外,數據結構的選擇高度依賴於您想要如何使用數據。你會經常修改收藏嗎?你會經常搜索特定的項目,還是大多數情況下你會通過每個項目?你會得到多少數據(不同的數據結構的縮放比例不同)。內存消耗是一個問題嗎? – Servy

回答

3

看起來像你需要一個Dictionary<int, List<string>>

var dict = new Dictionary<int, List<string>>(); 

var dict.Add(1, new List<string> { "hello", "world", "bye" }); 
var dict.Add(2, new List<string> { "foo", "bar" }); 
+0

酷我看起來不錯,謝謝 – cdub

2

這一切都取決於你有收集要做什麼,但它似乎像Lookup是萬一一個很好的候選人,你通過GROUP_ID需要組。

如果你的數據是在一個DataTable:

var lookup = table.AsEnumerable().ToLookup(row => row.Field<int>("group_id")); 

,然後訪問組方式如下:

foreach (var group in lookup) 
{ 
    int groupID = group.Key; 
    IEnumerable<DataRow> groupRows = group; 
} 
+0

+1:查找往往被忽視 –

0

要加載並從和您可以使用DataSet中的DB保存數據/ DataTable/DataRow類。 看看DataAdapter等取決於你的數據庫服務器(MySQL,MsSQL,...)

如果你想使用對象我建議你的ORM EntityFramework(微軟)或SubSonic。 http://subsonicproject.com/docs/The_5_Minute_Demo

與ORM,你可以使用LINQ查詢是這樣的:

// Define a query that returns all Department 
    // objects and course objects, ordered by name. 
    var departmentQuery = from d in schoolContext.Departments.Include("Courses") 
         orderby d.Name 
         select d; 
1

它非常強烈地依賴於你需要用數據做什麼。

如果您只需列出數據,請創建一個包含數據並使用List<Vocable>的類。

public class Vocable 
{ 
    public int Group { get; set; } 
    public string Term { get; set; } 
} 

List<Vocable> vocables; 

如果你需要查找屬於一個組的所有條款,使用Dictionary<int, List<string>>使用組ID鍵和條款值的列表。

如果您需要查找術語所屬的組,請使用Dictionary<string, int>,使用術語「作爲鍵」和組ID作爲值。