如何在C#LinQ中将字符串转换为布尔标志?

时间:2014-08-09 18:20:00

标签: linq asp.net-mvc-4 c#-4.0 linq-to-sql

我已经声明了布尔标志如下。

[Flags]
    public enum StudentStatus
    {
        True = 1,
        False = 2

    }

我通过下面一行的DataValues集合获取值,我想将它分配给下面的属性。

var student= new Student();

student.Status= StudentInfo.Data.DataValues
                .Where(m => m.FieldName.Equals("Status"))
                .Select(m => m.StatusValue).SingleOrDefault();

2 个答案:

答案 0 :(得分:1)

由于您使用的是.Net Framework 4,因此可以使用Enum.TryParse方法。

var student= new Student();

string status = StudentInfo.Data.DataValues
                                 .Where(m => m.FieldName.Equals("Status"))
                                 .Select(m => m.StatusValue).SingleOrDefault();
StudentStatus studentStatus;
Enum.TryParse(status, out studentStatus);

student.Status = studentStatus;

如果解析操作失败,则结果包含StudentStatus的默认值。

答案 1 :(得分:0)

首先,该枚举不适合作为[Flags]枚举。 [Flags]仅在一次可以激活许多不同值时使用。它应该声明为:

// Removed [Flags] - not appropriate here.
public enum StudentStatus
{
    True = 1,
    False = 2
}

在任何情况下,您都可以使用Enum.Parse将字符串解析回枚举。像这样:

string statusString = StudentInfo.Data.DataValues
                                 .Where(m => m.FieldName.Equals("Status"))
                                 .Select(m => m.StatusValue).SingleOrDefault();

student.Status = (StudentStatus) Enum.Parse(typeof(StudentStatus), statusString);

这适用于[Flags]和普通枚举。