使用枚举类型和LINQ在列表中存储和查询用户首选项(名称/值对)

时间:2014-07-29 18:37:57

标签: sql-server linq c#-4.0 enums linq-to-entities

假设我有一些用户可配置的设置,我想在SQL Server中保存并使用LINQ进行查询/操作:

public enum PreferenceType
{
    NamePublic,
    EmailPublic,
    BirthdayPublic,
    Visibility
}

前三个是布尔,但Visibility我想成为它自己的枚举......

public enum Visibility
{
    Normal,
    Hidden,
    FriendsOnly
}

我在类中包含成员数据:

public class Preference
{
    public int Id { get; set; }
    public PreferenceType Type { get; set; }
    public object Value { get; set; }
}

public class Member
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public DateTime Birthday { get; set; }
    [...]
    public virtual ICollection<Preference> Preferences { get; set; }
}

在我的数据环境中:

public DbSet<Member> Members { get; set; }

既然我们已经全部成立,这甚至可能吗?我希望能够在查询和其他地方轻松保存和访问这些用户首选项的值。例如:

List<Member> query = Members.Where(m =>
    m.Preferences.Any(v => v.Type == PreferenceType.Visibility
    && (Visibility)Enum.Parse(typeof(Visibility), v.Value) == Visibility.Normal));

我是否在正确的轨道上,甚至是关闭?我甚至想做什么?如果没有,考虑到它们可能是不同的数据类型,使用LINQ在数据库中存储和检索各种用户首选项的最佳实践是什么?我是否只需要使用包含所有内容的字符串的简单名称/值对?

0 个答案:

没有答案