2012-01-26 2 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: Lookups часто пропускаются –

0

Для загрузки и сохранения данных и БД можно использовать DataSet/DataTable/DataRow. Посмотрите на DataAdapter и т. Д., Зависит от вашего сервера базы данных (MySQL, MsSQL, ...)

Если вы хотите работать с объектами, я предлагаю вам ORMs EntityFramework (Microsoft) или SubSonic. http://subsonicproject.com/docs/The_5_Minute_Demo

с ОРМ вы можете использовать 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>> используя идентификатор группы как ключ и список терминов, как значение.

Если вам нужно найти группу, к которой принадлежит термин, используйте Dictionary<string, int>, используя термин как ключ и идентификатор группы как значение.

Смежные вопросы