mba*_*ema 8 c# linq enums fluent-nhibernate
我有一个域实体,它有一个标记的枚举作为属性.标记的枚举是这些实体的目标受众.然后,用户具有他们应该看到的实体的标记枚举值.我试图找出正确的表达式来选择满足用户目标受众的实体.
public class File
{
public virtual TargetAudience TargetAudience { get; set; }
}
[Flags]
public enum TargetAudience
{
Audience1 = 1,
Audience2 = 2,
Audience3 = 4,
Audience4 = 8
}
Run Code Online (Sandbox Code Playgroud)
表达式:(这在a上执行时有效IList<File>,但对数据库的查询不起作用.)
public Expression<Func<File, bool>> Expression
{
get { return ((x.TargetAudience & UserTargetedAudience) > 0); }
}
Run Code Online (Sandbox Code Playgroud)
任何的意见都将会有帮助.
在对数据库的查询中它以什么方式不起作用?
您没有显示完整的实现或映射。您是否坚持使用TargetAudience数字数据类型?
除非您跳过一些步骤来执行此操作,否则您的枚举将作为文本存储在数据库中,因此您无法对其执行按位操作。(这种行为与我在博客等中看到的一些行为相反,所以我不知道(a)自以前的版本以来它是否发生了变化,(b)它是否对我所使用的 SQLite 提供程序来说是唯一的正在使用,或 (c) 如果 Fluent NHibernate 以这种方式映射。)
您可以进行文本比较。组合标志存储为逗号分隔的列表,因此TargetAudience.Audience4 | TargetAudience.Audience1不会持久保存为9,而是保存为Audience1, Audience4。请注意,即使我以相反的顺序指定它们,它也会按升序保留。
var query = session.Linq<File>()
.Where(f => f.TargetAudience.ToString() == "Audience1, Audience4");
Run Code Online (Sandbox Code Playgroud)
您可以快速编写一些[扩展]方法来封装进行这些文本比较的麻烦。
请参阅如何使用流畅的 NHibernate 将枚举映射为 int 值?有关将枚举持久化为整数的信息
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |