LINQ: Using a ternary ( ?: ) with LINQ let is not enough, need an “IF” but can't seem to get it to work

后端 未结 1 1491
有刺的猬
有刺的猬 2020-12-20 02:52

I am trying to include an IF within my LET in LINQ but i can\'t get it to work, it seems to work for the ternary operator, but this is TRUE or FALSE and i need to have more

相关标签:
1条回答
  • 2020-12-20 03:11

    You can do that with the conditional operator (1)

    var tst = from p in products join i in info on p.id equals i.pid
    
    let status = p.type = "home" ? homestatus.Select(s=>s.status) :
                 p.type = "offshore" ? offshorestatus.Select(s=>s.status) :
                 p.type = "internal" ? internalestatus.Select(s=>s.status) : null
    select new {
    name = p.name,
    status = status != null ? status.StatusText : string.Empty;
    }
    

    If you are not using the status for anything else than the StatusText you could also do it like this

    var tst = from p in products join i in info on p.id equals i.pid
    
    let status = (p.type = "home" ? homestatus.Select(s=>s.status.StatusText) :
                 p.type = "offshore" ? offshorestatus.Select(s=>s.status.StatusText) :
                 p.type = "internal" ? internalestatus.Select(s=>s.status.StatusText) : null) ?? string.Empty
    select new {
    name = p.name,
    status = status;
    }
    

    (1) A ternary operator is any operator that takes three arguments, of which there at present is only one in C# called the conditional operator

    0 讨论(0)
提交回复
热议问题