Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 理解枚举-用作常量_C#_Entity Framework_Enums - Fatal编程技术网

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

所以我尝试使用枚举,可能是用了一种错误的方式,因为我来自PHP。在C#中,我有一个全局类,它可以:

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()