如何使用 linq 将“Y”或“N”值转换为布尔值?
Posted
技术标签:
【中文标题】如何使用 linq 将“Y”或“N”值转换为布尔值?【英文标题】:How to convert a 'Y' or 'N' Value to a boolean value using linq? 【发布时间】:2011-12-03 10:06:31 【问题描述】:我有这个从数据库中选择所有房间类型的功能,我正在将数据表中的值转换为通用列表以优化我正在创建的系统的速度我的问题是如何隐藏每个为字段 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"
要求的样本数据:
【问题讨论】:
发现condition? true: false
的无用使用。
哥们能不能给个好的建议:(
如果我看到== false
,这对我来说很有意义。但否则 == true 和 ?true:false (反之亦然)让我很生气。这对我来说总是一个坏旗子
是的,你是对的哥们.. id 修改了样本
您是在测试标题所暗示的“Y”/“N”,还是像您的问题所示的“Active”/“InActive”?
【参考方案1】:
也许字段中有空格?试试rt.Field<string>("IsActive").Trim()
。
好的,如果您检查 rt.Field<string>("IsActive")
并且它肯定是一个 UTF8 值为 89 ('Y'
) 或 121 ('y'
) 的单个字符,那么我的下一个猜测是它是属性。
RoomType.IsActive
是自动属性吗?如果不是,你能确定 getter 和 setter 是正确的吗?
如果不是这样,并且在return roomTypes;
一切看起来都不错,那么您的值正在调用堆栈的某处被更改。
【讨论】:
如果在那里调试并设置断点,rt.Field<string>("IsActive")
的值是多少?
是的,我做了那个哥们。我很确定那里没有空格。
好吧,我很难过。如果您确定该值为y
或Y
,则您的代码应该可以工作(无论是否需要条件)。该值不是您期望的y
/ Y
,或者稍后会对其进行修改。我的最后一个想法是检查返回的字符的实际代码值。在调试时,如果您为Encoding.UTF8.GetBytes(rt.Field<string>("IsActive").ToCharArray())
添加一个监视,它是否会显示一个byte[]
,其中包含一个值为89
或121
的条目?
好的,我用我最后的猜测编辑了我的答案。可能是RoomType.IsActive
属性...
Buddy.. 你说得对,它在初始化后被我的班级改变了。谢谢:)【参考方案2】:
试试这个。
IsActive = rt.Field<string>("IsActive").Trim().ToUpper().Equals("Y")
不需要指定真假。
【讨论】:
IsActive 好友是一个布尔值.. :( Equals 返回 true 或 false :) 艾伦,你很困惑:你的原始帖子清楚地表明你正在针对“Active”测试 IsActive 属性,这意味着它是一个字符串,但现在你说它是一个布尔值? ??您能否提供一些数据库中的示例行供我们查看? 啊哈.. Muhammad Addel Zahid 对不起,这里只是一个新手 :),@naveen 我已经在不使用此代码的情况下最小化了代码... IsActive = rt.Field以上是关于如何使用 linq 将“Y”或“N”值转换为布尔值?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 查询:如何将布尔值 1 和 0 转换为“通过”或“失败”