簡體   English   中英

帶有Q語句的LINQ where子句

[英]LINQ where clause with an if statement

我有配電板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}

這顯然行不通!

我不喜歡代碼中的幻數,但是您可以使用稍微不同的方法來完成所需的工作。

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

條件是,如果一個電路為230V,則它應過濾所有400V面板,如果一個電路為120V,則應過濾所有208V面板,所有其他電路電壓均等於該面板電壓。 即400V = 400V。

聽起來像三元運算符

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM