简体   繁体   中英

Linq: how to select certain text “True” or “False” for corresponding boolean values?

The following query is used to get data in which flagchecked is boolean.

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

I am using reducedList to export data to excel. Excel displays boolean values as checkboxes.I would like to have text "True" or "Done" for corresponding boolean true/false.

You could use the ternary/conditional operator: ?: Operator

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

The conditional operator works like: condition ? first_expression : second_expression; condition ? first_expression : second_expression;

This means that: e.flagchecked ? "True" : "False"; e.flagchecked ? "True" : "False"; works the same as:

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();

So, for this: e.flagchecked ? "Done" : "Not Done" e.flagchecked ? "Done" : "Not Done" . If (e.flagchecked == true) it returns "Done" and when (e.flagchecked == false) it returns "Not Done"

You might check the ?: Operator link I posted above.

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

您可以在实例化reducedList之后执行此reducedList

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM