2016-10-28 98 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 

}); 

} 
相关问题