2016-11-07 61 views
3

我有以下模型类:Foreach循环和lambda表达式

public class Promotion 
{ 
    public Offers Offers { get; set; }  
} 
public class Offers 
{ 
    public List<PromotionOffer> Offer { get; set; } 
} 
public class PromotionOffer 
{ 
    public string CategoryName { get; set; } 
    public List<Product> Product { get; set; } 
} 

public class Product 
{ 
    public string ProductName { get; set; } 
} 

我有Promotion对象和一个字符串allProducts

Promotion promotion = promotion; 
string allProducts = string.Empty; 

我想分配和allProducts追加ProductName其中CategoryName == "Premium"。 是否可以使用lambda表达式来实现此目的?或者也将需要一个foreach循环呢?请指导,我如何才能做到这一点?

+1

[有条件的更新使用LINQ列表]的可能的复制(http://stackoverflow.com/questions/19930450/conditional-updating-a-list-using-linq) – Tinwor

+1

你是说你想改变现有的'ProductName'属性的值?或者你是否想要将它们全部追加到'allProducts'?或两者? –

回答

4
promotion.Offers 
     .Offer 
     .Where(o => o.CategoryName == "Premium") 
     .SelectMany(o => o.Product) 
     .ToList() 
     .ForEach(n => n.ProductName = n.ProductName + "AppendedString"); 

如果你想敲掉它没有foreach循环,你可以使用的ListForEach方法,使用LINQ沿


如果你确实想只是建立这些字符串产品名称,你会使用:

var strs = promotion.Offers 
        .Offer 
        .Where(o => o.CategoryName == "Premium") 
        .SelectMany(o => o.Product) 
        .Select(p => p.ProductName); 

var allProducts = string.Join(",", strs); 
+0

是的!这工作! –

2

可与System.LinqString.Join来实现:

public static string ProductNameList(Promotion promotion, string category) { 
    var products = promotion.Offers 
     .Where(x => x.CategoryName == category) 
     .SelectMany(x => x.Product) 
     .Select(x => x.ProductName); 
    return String.Join(", ", products); 
}} 
+0

好的答案,唯一的问题是_promotion.Offers.Where_它应该是_promotion.Offers.Offer.Where_ – Steve