.net 这个Linq2Sql如何在select子句中创建枚举?
我得到了以下linq2sql查询,并将结果设置为POCO。我的POCO属性之一是枚举.net 这个Linq2Sql如何在select子句中创建枚举?,.net,linq-to-sql,enums,enumeration,.net,Linq To Sql,Enums,Enumeration,我得到了以下linq2sql查询,并将结果设置为POCO。我的POCO属性之一是枚举 public IQueryable<Models.Achievement> GetAchievements() { return from a in _sqlDatabase.Achievements select new Models.Achievement { // Note: ToEnum is an extens
public IQueryable<Models.Achievement> GetAchievements()
{
return from a in _sqlDatabase.Achievements
select new Models.Achievement
{
// Note: ToEnum is an extension method that converts an int -> the enum.
AchievementType = a.AchievementTypeId.ToEnum<Models.AchievementType>(),
DateTimeCreated = a.DateTimeCreated,
UserId = a.UserId
};
}
嗯。有没有一种方法可以让结果int转换成我的自定义枚举?你可以直接在LINQ to SQL中使用枚举(但不是实体框架);只需将属性的类型(在dbml/designer中)更改为完全限定的枚举类型,它就会为您执行强制转换。当然,您可能想将其称为AchievementType——这是一种直接(强制)翻译 如果这不适合您的场景,您可能必须将其选择为整数,然后在LINQ中对对象执行最终强制转换(通过AsEnumerable()。您还可以尝试直接强制转换(假设这已经足够)而不是通用扩展方法:
select new {..., AchievementType = (AchievementType) foo.Bar, ...}
并不是说,如果在dbml中定义了Models.acquisition
类型,就不能以这种方式创建它-只需简单地选择它。但如果这不是db模型的一部分,那也没关系这是一个在LINQ到SQL中将字符串映射到枚举的相关示例
如果两者都不适合,另一种方法是将enum属性声明为分部类中的垫片。我给出了一个例子(对于EF,但其工作原理相同),但请注意,如果这样做,则不能在
Where
子句等中使用enum属性,因为它未映射到模型中。也许您可以在模型中尝试类似的操作。成就声明:
AchievementType achievementType{
get
{
return this.AchievementTypeId.ToEnum<Models.AchievementType>();
}
set
{
this.AchievementTypeId = (int)value;
}
}
AchieventType AchieventType{
得到
{
返回此.AchievementTypeId.ToEnum();
}
设置
{
this.AchievementTypeId=(int)值;
}
}
Wow-太棒了!我删除了AchievementType L2S类,并将AchievementType字段重命名为AchivementType。然后将属性类型设置为my FQDN enum struct。MS测试->工作!令人惊叹的!它不仅可以工作,而且我的设计器更干净,现在删除了查找类!太棒了!
AchievementType achievementType{
get
{
return this.AchievementTypeId.ToEnum<Models.AchievementType>();
}
set
{
this.AchievementTypeId = (int)value;
}
}