如何使用linq将'Y'或'N'值转换为布尔值?

时间:2011-10-08 03:21:15

标签: c# linq list datatable enumerable

我有我的这个功能,它从数据库中选择所有房间类型,我将值从数据表转换为通用列表,以优化系统的速度,我正在创建我的问题是如何隐藏每个存储为字段isActive的值,其中包含来自“Active”/“Inactive”数据库的值,我必须将其转换为C#.net 4.0中的布尔值。你能帮助我吗?

         internal static List<RoomType> FetchRoomTypeList()
         {
             List<RoomType> roomTypes = new List<RoomType>();
             SqlCommand commRoomTypeSelector = ConnectionManager.MainConnection.CreateCommand();
             commRoomTypeSelector.CommandType = CommandType.StoredProcedure;
             commRoomTypeSelector.CommandText = "Rooms.asp_RMS_RoomTypeList_Select";
             SqlDataAdapter da = new SqlDataAdapter(commRoomTypeSelector);
             DataSet ds = new DataSet();
             da.Fill(ds);
             roomTypes = (from rt in ds.Tables[0].AsEnumerable()
                          select new RoomType
                          {
                              RoomTypeID = rt.Field<int>("RoomTypeID"),
                              RoomTypeName = rt.Field<string>("RoomType"),
                              LastEditDate = rt.Field<DateTime>("LastEditDate"),
                              LastEditUser = rt.Field<string>("LastEditUser"),
                              IsActive = rt.Field<string>("IsActive") == "Active"
                          }
                         ).ToList();

             return roomTypes;
         }

下面的行不会返回真值,而是始终返回错误值

IsActive = rt.Field<string>("IsActive") == "Active"

请求的样本数据:

enter image description here

2 个答案:

答案 0 :(得分:3)

也许这个领域有空间?试试rt.Field<string>("IsActive").Trim()


好的,如果你检查rt.Field<string>("IsActive")并且肯定是UTF8值为89('Y')或121('y')的单个字符,那么我的下一个猜测就是它是属性。

RoomType.IsActive是自动财产吗?如果没有,你能确定吸气剂和定位器是否正确吗?

如果不是这样,并且在return roomTypes;一切看起来都不错,那么你的值会在调用堆栈的某个地方被更改。

答案 1 :(得分:2)

试试这个。

IsActive = rt.Field<string>("IsActive").Trim().ToUpper().Equals("Y")

无需指定true false。