C# LINQ-如何更改select或foreach循环中的值?
第二项返回false或true。是否可以替换为不同的字符串值(例如On和Off)并添加到项目中(IQueryable)?您的意思是喜欢吗C# LINQ-如何更改select或foreach循环中的值?,c#,linq,C#,Linq,第二项返回false或true。是否可以替换为不同的字符串值(例如On和Off)并添加到项目中(IQueryable)?您的意思是喜欢吗 IQueryable items = from rr in _dt.AllItems where rr.ID == ItemID select new{rr.Item, rr.SecondItem}; 你可以这样做: var items = from rr in _dt.AllI
IQueryable items = from rr in _dt.AllItems
where rr.ID == ItemID
select new{rr.Item, rr.SecondItem};
你可以这样做:
var items = from rr in _dt.AllItems
where rr.ID == ItemID
select new
{
rr.Item,
rr.SecondItem == true ? "On" : "Off"
};
好吧,我发现了。我在SQL数据库列中使用了位类型(true或false)。当我使用LINQ进行选择时,我需要替换为(“开”或“关”)值。 下面的代码满足我的需要
IQueryable items = from rr in _dt.AllItems
where rr.ID == ItemID
select new {
rr.Item,
SecondItem = rr.SecondItem.HasValue ? "Off" : rr.SecondItem ? "On" : "Off"
};
谢谢你们的快速反应。我尝试了两种方法,但都出现了错误“无法将类型'System.Nullable'隐式转换为'bool'?”?您知道解决方法吗?请参阅我的编辑-由于SecondItem可为null,您必须首先检查它是否有值(不是null),然后使用它。@Marek Karbarz:您不需要执行HasValue检查,因为可为null的结构覆盖了Equals方法()。谢谢,它看起来可以工作。我不确定,因为我意识到我将这个值存储为位(0或1),因为某些原因,它总是返回false(即使是1或0)。有什么想法吗?好的,我知道了。它是这样工作的-(SecondItem=rr.SecondItem.Value?“开”:“关”)@Eugene:只做rr.SecondItem.Value时要小心。Nullable结构背后的整个想法是可能没有值(在您的情况下,这种情况非常不可能,因为您是从一个位字段获取数据)。好的,我明白了,但在我的情况下,如果不是真的,它将是假的。感谢you@Eugene:它可以是false、true和null。这就是为什么Marek Karbarz的示例检查HasValue属性(如果为null)。
IQueryable items = from rr in _dt.AllItems
where rr.ID == ItemID
select new {
rr.Item,
SecondItem = rr.SecondItem.Value ? "On" : "Off"
};