2014-10-22 99 views
0

我想簡化以下過程:顯示列表項的名稱

var _cat = new Categories(); 
_cat.GetCategories(); 

檢索:

ID Name 

1 Men 
2 Women 
3 Unisex 
4 Access 
5 Kids 


string[] prodCat = p.ProductCategory.Split(','); // Contains value 2,3,5 

,並輸出到我的標籤:

foreach (Category c in _cat) 
    { 
     foreach (string pr in prodCat) 
     { 
      if (pr.Length > 0 && Convert.ToInt32(pr) == c.Id) 
      { 
       lblSaveCat.Text += c.CatName + " <br />"; 
      } 
     } 
    } 

我我認爲可能有更有效的方法來做到這一點,而不是通過linq循環?

回答

0

您可以使用string.Join

var prodCat = p.ProductCategory.Split(',').Select(int.Parse).ToArray(); 

lblSaveCat.Text = string.Join(" <br />", _cats.Where(x => prodCat.Contains(x.Id)).Select(c => c.CatName)); 

順便說一句,你需要使用\r\nEnvironment.NewLine,如果你想每個值後換行。除非您的標籤顯示html,否則<br />不會工作。

0

,工程巨大,不得不做了小修改,因爲我曾在prodCat結束一個額外的逗號:

var _cat = new Categories(); 
    _cat.GetCategories(); 

    p.ProductCategory = p.ProductCategory + "0"; 

    var prodCat = p.ProductCategory.Split(',').Select(int.Parse).ToArray(); 

    lblSaveCat.Text = string.Join("\r\n", _cat.Where(x => prodCat.Contains(x.Id)).Select(c => c.CatName));