我想简化以下过程:
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 :(得分: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\n
或Environment.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));