2012-01-26 50 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作为值。