2012-01-26 9 views
0

dbからデータをロードして使用する必要があります。データは次のように表されます。自分のデータのコレクションを選ぶ

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

etc. 

このデータをロードして使用するには、どのようなC#コレクションが適していますか?あなたがDictionary<int, List<string>>を必要とするよう

+0

データ構造の選択は、データそのものに加えて、データの使用方法に大きく依存します。コレクションを頻繁に変更しますか?特定のアイテムを頻繁に検索しますか、通常はほとんどの場合すべてのアイテムを調べますか?どのくらいのデータを持っていますか(異なるデータ構造は異なるスケールになります)。メモリが消費されていますか? – Servy

答えて

3

が見える:

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によってグループに必要な場合では良い候補です。

あなたのデータは、データテーブル内にある場合:その後、

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(Microsoft)またはSubSonicをお勧めします。あなたはこのようにLINQクエリを使用することができますORMと http://subsonicproject.com/docs/The_5_Minute_Demo

// 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; 

あなたがキーと値のような用語のリストとしてグループIDを使用してDictionary<int, List<string>>を使用し、グループに属するすべての用語を検索する必要がある場合。

用語が属しているグループを検索する必要がある場合は、用語としてキーを使用し、グループIDを値として使用してDictionary<string, int>を使用します。