LINQ where子句带有if语句

时间:2016-06-17 15:55:10

标签: c# linq

我有电气面板LINQ声明,我想按电压类型进行过滤。 条件是如果一个电路是230V它应该过滤所有400V面板,如果它的120V它应该过滤所有208V面板,所有其他电路电压等于面板电压。即400V = 400V。

我需要一个条件语句来表示我的电压where子句。这是我的第一次尝试,但它似乎对我不起作用。

var panels = from p in context.tblPanels
             join x in context.SI_GridCoordinates 
             on new {fac = p.Facility, X = p.X} 
                equals new { fac = x.FAB, X = x.GRID}
             join y in context.SI_GridCoordinates 
             on new { fac = p.Facility, Y = p.Y } 
                equals new { fac = y.FAB, Y = y.GRID }
             where p.Train == item.train &&  
             if (item.voltage == 230) { p.Voltage == 400} else if (item.voltage == 120) { p.Voltage == 208 } else { p.Voltage ==item.voltage}

这显然不起作用!

2 个答案:

答案 0 :(得分:1)

我不喜欢代码中的魔术数字,但你可以通过稍微不同的方法来完成你需要的东西。

if (item.voltage == 230) { p.Voltage == 400} 
else if (item.voltage == 120) { p.Voltage == 208 } 
else { p.Voltage ==item.voltage}

变为

((item.voltage == 230 && p.Voltage == 400) || 
(item.voltage == 120 && p.Voltage == 208) || 
(item.voltage != 230 && item.voltage != 120 && p.Voltage ==item.voltage))

答案 1 :(得分:1)

  

条件是如果电路是230V它应该过滤所有400V面板,如果它的120V它应该过滤所有208V面板,所有其他电路电压等于面板电压。即400V = 400V。

听起来像ternary operator

where p.Train == item.train &&
    p.Voltage == (item.voltage == 230 ? 400 : item.voltage == 120 ? 208 : item.voltage)