0

データベースからいくつかのレコードをフェッチし、列挙型のプロパティに基づいてそれらをフィルタリングする必要があるとしましょう。

  • フェッチList<SomeType>
  • フィルターをかけるSomeType.Size
  • 列挙Size { Small, Medium, Large }

レコードを表示するとき、サイズ フィルター (中など) の定義済みの値があります。ほとんどの場合、ユーザーは事前定義された値でフィルタリングされたデータから値を選択します。ユーザーが大規模にフィルターし、次に中規模にフィルターし、さらに大規模にフィルターする可能性もあります。

同じシナリオでさまざまな状況があります:

  • リストに含まれるレコードは 100 件未満で、プロパティは 3 ~ 5 件です
  • リストには 100 ~ 500 件のレコードと 3 ~ 5 件のプロパティが含まれます
  • リストには、3 ~ 5 個のプロパティを持つ最大 2000 レコードが含まれます

ここで私の最善のアプローチは何ですか? 各列挙型のグリッドを含むタブが必要ですか、それとも 1 つの共通の列挙型を持ち、常にフィルター処理する必要がありますか?

4

2 に答える 2

1

データベースでフィルタリングを正しく行います。これらのフィールドがインデックス化されている場合、db フィルターを使用すると、事後に c-sharp でフィルタリングするよりもはるかに高速になると思われます。

もちろん、複数の不要なデータベース呼び出しを防ぐために、フィルター処理されたデータベースの結果をいつでもキャッシュできます。

編集:データベースに情報を保存することに関しては、このフィールドを設定したとします:

CREATE TABLE Tshirts
(
    id int not null identity(1,1),
    name nvarchar(255) not null,
    tshirtsizeid int not null,
    primary key(id)
)

CREATE TABLE TshirtSizes
(
    id int not null, -- not auto-increment
    name nvarchar(255)
)

INSERT INTO TshirtSizes(id, name) VALUES(1, 'Small')
INSERT INTO TshirtSizes(id, name) VALUES(2, 'Medium')
INSERT INTO TshirtSizes(id, name) VALUES(3, 'Large')

ALTER TABLE Tshirts ADD FOREIGN KEY(tshirtsizeid) REFERENCES tshirtsize(id)

次に、C#で

public enum TShirtSizes 
{
    Small = 1,
    Medium = 2,
    Large = 3
}

この例ではTshirtSizes、マジック ナンバー 1、2、および 3 が何を意味するかを読者が知るためにのみ、表が使用されています。データベースの読み取り能力を気にしない場合は、これらのテーブルを省略して、インデックス付きの列だけを使用できます。

于 2012-06-20T19:43:02.590 に答える
0

通常、メモリは安価です。それ以外の場合は、すべての値を1回ソートし、O(n)となる比較に基づいて取得できます。あなたは物事の位置を追跡し、その方法でより速く検索することができます。

于 2012-06-20T19:34:05.043 に答える