【发布时间】:2013-04-23 20:19:02
【问题描述】:
所以我尝试使用枚举,可能是错误的方式,因为我来自 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;
}
}
但我得到了错误:
运算符“==”不能应用于“字符串”类型的操作数和 'LocApp.Helpers.Classes.LocationAssignments.GlobalTypes.assignmentType'
发生在
la.type == GlobalTypes.assignmentType.PER
我的逻辑,这来自 php,是我想要一个全局常量,我可以在任何地方调用以在调用时“回显”该常量的值,因此常量值可以更改,但我不必在一百万个地方改变它。
想法?
【问题讨论】:
-
只需放弃
= "SERV"部分,就可以了。这是一些关于 C# 中枚举用法的 MSDN 文档:msdn.microsoft.com/en-ca/library/vstudio/cc138362.aspx 编辑:另外,您的la.type应该定义为GlobalTypes.assignmentType而不是字符串。 -
枚举不是字符串,C# 不是 PHP。
-
@ChrisSinclair 所以你是说我能做到:
&& GlobalTypes.assignmentType??它会知道我想要什么? -
我认为你应该只使用
public const值,因为(正如人们已经说过的)C# 中的 emuns 不能是字符串(它们只能是整数类型:byte、short、ushort , int, uint, long, ulong)。 -
@TheWebs 不,我的意思是您的
LocationAssignments.type属性应该输入为GlobalTypes.assignmentType而不是字符串,那么您的 LINQ 查询仍然看起来像它一样(我相信)。针对enum而不是作为字符串键入的好处是(有助于)防止分配垃圾数据(不能意外分配“ASDF”或“SomeAssignmentTypeThatDoesNotExist”)。这样做仍然可能,但更难(您通常必须尝试在那时分配垃圾数据)
标签: c# entity-framework enums