C# LINQ-如何更改select或foreach循环中的值?

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

第二项返回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.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"
               };