C# 理解枚举-用作常量
所以我尝试使用枚举,可能是用了一种错误的方式,因为我来自PHP。在C#中,我有一个全局类,它可以:C# 理解枚举-用作常量,c#,entity-framework,enums,C#,Entity Framework,Enums,所以我尝试使用枚举,可能是用了一种错误的方式,因为我来自PHP。在C#中,我有一个全局类,它可以: public static class GlobalTypes { public enum assignmentType { SERV = "SERV", PROD = "PROD", PER = "PER", } } 在此基础上,我尝试通过以下方式与实体交互: public static IEnumerable<Person> getAllAgents(int id
public static class GlobalTypes
{
public enum assignmentType { SERV = "SERV", PROD = "PROD", PER = "PER", }
}
在此基础上,我尝试通过以下方式与实体交互:
public static IEnumerable<Person> getAllAgents(int id)
{
using (var db = new LocAppContext())
{
var person = (from p in db.Person
join la in db.LocationAssignment on p.id equals la.value
where la.locationID == id && la.type == GlobalTypes.assignmentType.PER
select p).ToList();
return person;
}
}
我的逻辑是,这是从php来的,我想要一个全局常量,我可以在任何地方调用它,在调用时“回显”该常量的值,所以常量值可以更改,但我不必在一百万个地方更改它
想法?如果需要常量字符串,则不要使用枚举。枚举用于整数类型。只需使用常量:
public static class MyClass
{
public const string PROD = "PROD";
public const string DEV = "DEV";
}
// elsewhere...
la.type == MyClass.PROD;
快速回答:
public enum assignmentType { SERV, PROD, PER }
在比较中(假设la.type返回一个字符串):
只要去掉
=“SERV”
部分就可以了。这里有一些关于C#中枚举用法的MSDN文档:编辑:另外,你的la.type
应该定义为GlobalTypes.assignmentType
而不是字符串。枚举不是字符串,C#不是PHP。@ChrisSinclair你是说我可以做:和&GlobalTypes.assignmentType
??它会知道我想要什么?我想你应该使用public const
值来实现这一点,因为(正如人们已经说过的)C#中的EMUN不能是字符串(它们只能是整数类型:byte、short、ushort、int、uint、long、ulong)。@TheWebs No,我的意思是,您的LocationAssignments.type
属性应键入为GlobalTypes.assignmentType
而不是字符串,那么您的LINQ查询仍将保持原样(我相信)。针对枚举而不是作为字符串键入的好处是(有助于)防止垃圾数据被分配(不能意外地分配“ASDF”或“someAssignmentTypeThatnoteTextist”)。这样做仍然是可能的,但更困难的是(您通常必须在此时尝试分配垃圾数据),即使您不必使用枚举,为什么您不想这样做呢?使用枚举听起来像是解决此问题的完美解决方案。问题:LINQ to Entities无法识别“System.String ToString()”方法,并且此方法无法转换为存储表达式。la.type,在这之前是:la.type==“PER”,所以是的,这是一个字符串,但是错误仍然与@Servy保持一致。枚举是一个很好的解决方案,因为它用于对3个值进行分组。按照其他人的建议使用常量可以删除分组。可能使用ToString并保存到查询中使用的临时字符串。让枚举在代码的其他地方重用是有意义的。我同意,注释已修改。问题仍然存在@CaptainSkyhawk,我无法使用.ToString()将其转换为字符串,即使.type是字符串。
public enum assignmentType { SERV, PROD, PER }
where la.locationID == id && la.type == GlobalTypes.assignmentType.PER.ToString()