Linq:如何为相应的布尔值选择某些文本“True”或“False”?

时间:2016-07-15 07:21:50

标签: c# linq

以下查询用于获取flagchecked为boolean的数据。

var reducedList = alarmlog.Select(e => 
new { 
    e.ID, 
    e.alarmname, 
    e.alarmmessage, 
    e.metername, 
    e.starttime, e.flagchecked 
}).ToList();

我使用reducedList将数据导出到excel。 Excel将布尔值显示为复选框。我希望文本“True”或“Done”表示相应的布尔值true / false。

3 个答案:

答案 0 :(得分:4)

您可以使用三元/条件运算符:?: Operator

var reducedList = alarmlog.Select(e => new 
{ 
    e.ID, 
    e.alarmname, 
    e.alarmmessage, 
    e.metername, 
    e.starttime, 
    flagchecked = e.flagchecked ? "Done" : "Not Done" }).ToList();

条件运算符的工作方式如下:condition ? first_expression : second_expression;

这意味着:e.flagchecked ? "True" : "False";相同的作为:

private string ConvertTrueFalseString(bool value)
{
    if(value)
        return "True";
    else
        return "False";
}

var reducedList = alarmlog.Select(e => new 
{ 
    e.ID, 
    e.alarmname, 
    e.alarmmessage, 
    e.metername, 
    e.starttime, 
    flagchecked = ConvertTrueFalseString(e.flagchecked)).ToList();

所以,为此:e.flagchecked ? "Done" : "Not Done"。如果(e.flagchecked == true),则返回"完成" 以及(e.flagchecked == false)它返回"未完成"

您可以查看我上面发布的?: Operator链接。

答案 1 :(得分:1)

var reducedList = alarmlog.Select(e => new {
    e.ID,
    e.alarmname,
    e.alarmmessage,
    e.metername,
    e.starttime,
    flagchecked = e.flagchecked ? "Done" : "Undone"
}).ToList();

答案 2 :(得分:0)

reducedList.ForEach(x => x.flagchecked == "True" ? x.flagchecked = "Done" : x.flagchecked = "Undone");

您可以在实例化reducedList

后执行此操作