假设我需要从数据库中获取一些记录,并根据枚举类型属性对其进行过滤。
List<SomeType>
SomeType.Size
Size { Small, Medium, Large }
显示记录时,将有一个预定义的值过滤器(ex Medium)。在大多数情况下,用户将通过预定义值从过滤数据中选择一个值。 用户也有可能过滤到大,然后过滤到中,然后再过滤到大。
我有不同情况的相同情况:
这里我最好的方法是什么?我应该有一个包含每个枚举网格的标签,还是应该有一个常用的枚举并始终过滤,或者?
答案 0 :(得分: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的含义。如果您不关心数据库可读性,则可以省略这些表,并且只有一个索引列。
答案 1 :(得分:0)
记忆力通常很便宜。否则,您可以一次性对所有值进行排序,并根据O(n)的比较进行检索。你可以跟踪事物的位置并以更快的方式检索。