0

私はこの次の表を持っています(私はこれを として置くことを考えていますdatatableが、私は柔軟です):

ID(int)   Branch(string)   Department(string)   Available(Boolean)

 101          North           Sales               True
 101          North           Marketing           False
 102          North           Security            True
 103          South           Sales               True
 ...          ...             ...                 ...

Availableクエリできるようにしたい[ID][Branch][Department]

したがって、次のようなもの[101]["North"]["Marketing"]が私に を与えるFalseか、少なくとも を含む行が[101]["North"]["Marketing"]テーブルに存在するかどうかを教えてくれます。

これについて最も効率的な方法は何ですか?より効率的であると思われる場合は、他の構造を自由に提案してください。datatable

4

4 に答える 4

1

DataTable のSelectメソッドを使用できます。お気に入り

datatable.Select("ID = 101 AND Branch='North' AND Department = 'Marketing'"); 
于 2012-04-30T20:22:46.167 に答える
1

DataTable の PrimaryKey を最初の 3 列に設定してから、DataTable の Rows.Find(101, "North", "Marketing") を使用して行を探すか、存在しない場合は null を取得します。

于 2012-04-30T20:33:22.577 に答える
1

いくつかのデータベースには含まれないことを付け加えておきます。小さなルックアップテーブルとしてメモリに保存されます。おそらく20行を超えることはありません。

その場合、パフォーマンスとメモリ フットプリントの両方で最も効率的な方法は、Branch と Department の列挙を使用し、トリプル ネストされた配列アプローチを使用することです。

そうは言っても、それと単純なデータテーブルの両方がメンテナンスの悪夢になるでしょう。明確に定義された型を検討することをお勧めします。

于 2012-04-30T20:33:44.320 に答える
1

メモリ内のデータ量が少ない場合は、LINQ to object を使用して、データ用のカスタム ビジネス オブジェクトを作成してみませんか? より効率的でしょうDataTable

public class Branch
{
  public int ID {get;set;}
  public string BranchName {get;set;}
  public string Department {get;set;}
  public bool Available {get;set;}
}

public bool BranchExists(int id, string branch, string dept)
{
   //assume "Branches" is your in-memory list
   return Branches.Any(b => b.id == id && b.BranchName == branch && b.Department == dept);
}
于 2012-04-30T20:52:56.870 に答える