使用' if'变量中的语句

时间:2015-08-13 12:21:10

标签: c# wpf linq if-statement

我在下面的代码中使用if语句。

var qisg = new QuoteItemSectionGroup
{
    SectionGroup = db.SectionGroups.Where(x => x.Name == "Longitudinals" && x.Section == TruckSection.FloorSpecification).First(),
    //If statement below.
    StockItem = quoteItem.BodyType.Name == "Insulated" ? db.StockItems.Where(x => x.StockCode == "SCH095").First() : db.StockItems.Where(x => x.StockCode == "SCH100").First(),
};

我想知道如何在我声明if的行内创建多个StockItem语句。或者,如果有更好的方法在不使用if语句的情况下执行此操作,请告诉我:)

谢谢!

7 个答案:

答案 0 :(得分:2)

我认为更好的方法是

string Condition(string cond) 
{
    switch(cond)
    {
        case "Insulated":
            return "SCH095";
           ...
    }
}
StockItem = db.StockItems.Where(x => x.StockCode == Condition(quoteItem.BodyType.Name)).First();

答案 1 :(得分:1)

喜欢那个

var elements=$(".js-block-height");
elements.each(function(){
   $(this).css("height",$(this).data("height")); 
});

等等。 但我不认为这是好风格。其他人和你在几个月内的可读性不会增加;)

答案 2 :(得分:1)

可以链接?:这样的调用

predicateA ? expressionA : predicateB ? expressionB : expressionC

这相当于

if (predicateA)
{
    expressionA
}
else if (predicateB)
{
    expressionB
}
else expressionC

但我会建议你稍微重构一下你的代码。这样的事可能吗?

var stockCode = quoteItem.BodyType.Name == "Insulated" ? "SCH095" : "SCH100";

...

    StockItem = db.StockItems.Where(x => x.StockCode == stockCode).First();

然后从那里开始。

答案 3 :(得分:1)

您正在使用Ternary Operator。并且您可以添加任意数量的条件,但这将是一个糟糕的编程实践。对多个条件使用if语句。 Explanation of Ternary Operators Explanation of if statments

演示1 (使用三元运算符):

StockItem = quoteItem.BodyType.Name == "Insulated" ?
                          db.StockItems.Where(x => x.StockCode == "SCH095").First() : 
                         ( quoteItem.BodyType.Name == "Promoted"?
                                        db.StockItems.Where(x => x.StockCode == "SCH100").First():
                                        db.StockItems.Where(x => x.StockCode == "SCH148").First());

演示2 (使用If语句):

StockItem stockItem=null;
if(quoteItem.BodyType.Name == "Insulated")
{
   stockItem = b.StockItems.Where(x => x.StockCode == "SCH095").First();
}
else if(quoteItem.BodyType.Name == "Promoted")
{
   stockItem = b.StockItems.Where(x => x.StockCode == "SCH100").First();   
}
else
{
   stockItem = b.StockItems.Where(x => x.StockCode == "SCH148").First();   
}

答案 4 :(得分:0)

它被称为三元运算符。只要在每个分支中保持? :语法一致,您就可以在额外的代码路径中定义其他条件。现在,我不推荐这个,因为它听起来像switch块的情况,但你去了。

答案 5 :(得分:0)

如果您真的想将它保留在我不建议阅读的行中,您可以使用嵌套的条件运算符。

请参阅链接以了解嵌套条件运算符的使用。

http://twistedoakstudios.com/blog/Post5273_how-to-read-nested-ternary-operators

答案 6 :(得分:0)

如果您想检查多个条件,而不是:

StockItem = quoteItem.BodyType.Name == "Insulated" ? 
                db.StockItems.Where(x => x.StockCode == "SCH095").First() 
                : db.StockItems.Where(x => x.StockCode == "SCH100").First()

像这样使用:

StockItem = quoteItem.BodyType.Name == "Insulated" ? 
                db.StockItems.Where(x => x.StockCode == "SCH095").First() 
                : ( quoteItem.BodyType.Name == "unInsulated" ) ?
                          db.StockItems.Where(x => x.StockCode == "SCH995").First() 
                          : db.StockItems.Where(x => x.StockCode == "SCH110").First()

您可以连接任意数量的条件,但这不是一个好主意,因为代码的可读性会受到影响。