0

假设我需要从数据库中获取一些记录,并根据枚举类型属性过滤它们。

  • 拿来List<SomeType>
  • 过滤SomeType.Size
  • 枚举Size { Small, Medium, Large }

显示记录时,大小过滤器(例如中)会有一个预定义的值。在大多数情况下,用户将通过预定义的值从过滤数据中选择一个值。用户也有可能过滤到大,然后过滤到中,然后再次过滤到大。

我有相同情况的不同情况:

  • 列表包含少于 100 条记录和 3-5 个属性
  • 列表包含 100-500 条记录和 3-5 个属性
  • 列表最多包含 2000 条记录,包含 3-5 个属性

我在这里最好的方法是什么?我应该有一个包含每个枚举网格的选项卡,还是应该有一个通用枚举并始终过滤,或者?

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

内存通常很便宜。否则,您可以一次性对所有值进行排序并根据 O(n) 的比较进行检索。您可以跟踪事物的位置并以这种方式更快地检索。

于 2012-06-20T19:34:05.043 回答