显示列表项目名称来自数组ID' s#

时间:2014-10-22 08:30:53

标签: c# arrays linq list join

我想简化以下过程:

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?

2 个答案:

答案 0 :(得分: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<br />除非您的标签显示为html,否则无效。

答案 1 :(得分: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));