如果重复,Foreach循环只显示一次值

时间:2015-07-02 08:50:48

标签: c# razor razor-2

我有一个foreach循环,其中值重复,我想将值和值组合仅一次。我的代码看起来像这样

foreach (LoopItem i in GetLoop("Product.Prices")){
    var priceQuantity = "";
    if(i.GetInteger("Ecom:Product.Prices.Quantity") == 0){
        priceQuantity = "1";
    } else if(i.GetInteger("Ecom:Product.Prices.Quantity") >= 1){
        priceQuantity = i.GetString("Ecom:Product.Prices.Quantity");
    }   
    <!--@Translate(Ved, "VED")--> @priceQuantity <!--@Translate(Count, "STK")-->. - <!--@Translate(Count, "STK")-->. <!--@Translate(Price, "PRIS")-->. @i.GetValue("Ecom:Product.Prices.AmountFormatted")<br/> 
    }

给出了以下输出    1 stk,    1 stk,    1 stk,    12 stk,    8 stk,    8 stk,    1 stk

我想将其输出为    1 stk,    12 stk,     8 stk

如何实现此输出请帮助

3 个答案:

答案 0 :(得分:2)

你可以这样做,然后采取可枚举的集合

Parent.find(req.query.id).populate('children').exec(function(err, parent){
  console.log('children.length = ' + parent[0].children.length);
});

这将为您提供一个数量项目

答案 1 :(得分:1)

var result = GetLoop("Product.Prices").GroupBy(x => x.Quantity).Select(x => x.First());

然后您可以根据自己的条件打印结果集合。

    foreach (LoopItem i in result){
        var priceQuantity = "";
        if(i.GetInteger("Ecom:Product.Prices.Quantity") == 0){
            priceQuantity = "1";
        } else if(i.GetInteger("Ecom:Product.Prices.Quantity") >= 1){
            priceQuantity = i.GetString("Ecom:Product.Prices.Quantity");
        }   
        <!--@Translate(Ved, "VED")--> @priceQuantity <!--@Translate(Count, "STK")-->. - <!--@Translate(Count, "STK")-->. <!--@Translate(Price, "PRIS")-->. @i.GetValue("Ecom:Product.Prices.AmountFormatted")<br/> 
    }

但您也可以使用HashSet<T>

以其他方式完成此操作
var sequence = GetLoop("Product.Prices");
var alreadyIn = new HashSet<T>();
foreach(var i in sequence)
{
        if(alreadyIn.Add(i))// Returns false if item was already in set
        {
           if(i.GetInteger("Ecom:Product.Prices.Quantity") == 0){
               priceQuantity = "1";
           }else if(i.GetInteger("Ecom:Product.Prices.Quantity") >= 1){
             priceQuantity = i.GetString("Ecom:Product.Prices.Quantity");
           }
           <!--@Translate(Ved, "VED")--> @priceQuantity <!--@Translate(Count, "STK")-->. - <!--@Translate(Count, "STK")-->. <!--@Translate(Price, "PRIS")-->. @i.GetValue("Ecom:Product.Prices.AmountFormatted")<br/> 
        }              
}

答案 2 :(得分:0)

使用Distinct()之类的:

  foreach (LoopItem i in GetLoop("Product.Prices").Distinct())

应该工作。