2016-10-28 69 views
0

我使用Linq初始化一個類對象,我需要做的就是將值設置爲0,如果我發現來自另一個類對象的值是負數,這裏的現有代碼:Linq - 如果它是一個負數將int設置爲0

public void fillObject(FillData dataToAdd) 
{ 
    Data data = new Data(); 

    Data.Items = dataToAdd.maindata 
     .select(
      x => new Data.ItemsStruct 
        { 
         parameter1inItemsStruct = x.intno1, 
         parameter1inItemsStruct = x.intno2 
        }); 
} 

intno1intno2可以是任意值,但如果該值是負數我想將它設置爲0。

沒有人有任何想法如何可以在來達到的LINQ?我不想做的是直接引用對象中的每個參數並檢查/更改它的值,我只想用Linq檢查/更改'inline'值。

+0

匿名函數不限於單個表達式。 'x => new Something(x)'也可以寫成'x => {return new Something(x); }',並且該表示法允許多個語句/表達式。 –

+0

謝謝,這也有助於我未來的發展:) –

回答

4

你可以使用Math.Max爲:

parameter1inItemsStruct = Math.Max(0, x.intno1), 
parameter1inItemsStruct = Math.Max(0, x.intno2) 
+0

啊哈謝謝,所以它比較0與變量並返回最大總和,在這種情況下,0總是高於一個負數,但超過0將是可接受的值? –

+0

@DanHall它返回較大的值(不是總和)。如果你看看實現,它是:'val1> = val2? val1:va​​l2' – Nico

+1

感謝您的幫助:) –

1

使用?: Operator

{ 
    parameter1inItemsStruct = x.intno1 > 0 ? x.intro1 : 0, 
    parameter1inItemsStruct = x.intno2 > 0 ? x.intro2 : 0 

} 
-1

事情是這樣的:parameter1inItemsStruct = x.intno1 < 0 ? 0 : x.intno1

0

嘗試:

public void fillObject(FillData dataToAdd) 
{ 
Data data = new Data(); 

Data.Items = dataToAdd.maindata 
.select(x => new Data.ItemsStruct 
{ 

parameter1inItemsStruct = x.intno1<0?0:x.intno1, 
parameter1inItemsStruct = x.intno2<0?0:x.intno2 

}); 

} 
相關問題