我有一个包含这样数据的表:
ProductId ProductName ProductPropertyOne ProductPropertyTwo ProductSortOrder
--------- ----------- ------------------ ------------------ ---------
1 Product 01 Propery-A Value-01 100
1 Product 01 Propery-A Value-02 100
1 Product 01 Propery-A Value-03 100
1 Product 01 Propery-A Value-04 100
1 Product 01 Propery-B Value-01 100
1 Product 01 Propery-B Value-02 100
2 Product 02 Propery-B Value-01 200
2 Product 02 Propery-B Value-02 200
2 Product 02 Propery-B Value-03 200
2 Product 02 Propery-A Value-01 200
3 Product 03 Propery-A Value-01 100
3 Product 03 Propery-A Value-02 100
3 Product 03 Propery-C Value-01 100
3 Product 03 Propery-C Value-02 100
3 Product 03 Propery-C Value-03 100
3 Product 03 Propery-C Value-04 100
我正在我的页面中循环这些数据,如下所示:
<%
MyEntities db = new MyEntities();
my_ProductList = db.Product.Where(it => it.ProductPropertyOne == "Propery-A").OrderBy(it => it.ProductSortOrder).ToList();
foreach (MyData.Product Product in my_ProductList) {
%>
<a href="#"><%=Product.Name%></a>
<%}%>
但实际上我想要一个这样的列表:
<a href="#" data-Value-01="yes" data-Value-02="yes" data-Value-03="yes" data-Value-04="yes">Product 01</a>
<a href="#" data-Value-01="yes">Product 02</a>
<a href="#" data-Value-01="yes" data-Value-02="yes">Product 03</a>
所以我必须让我的foreach为每个产品写一行(对于每个具有不同属性和值的产品,表中有/将会有多个产品记录)但是在行中我应该将属性写为HTML数据属性
我甚至无法想出它的逻辑。
关于它的逻辑的任何想法?
由于
答案 0 :(得分:0)
您提供的示例输出有点令人困惑。也许你可以准确地解释你想要放在<a></a>
元素中的内容并解释使用列名。
从你的例子:
<a href="#" data-Value-01="yes" data-Value-02="yes" data-Value-03="yes" data-Value-04="yes">Product 01</a>
这很有道理。因此,您基本上希望以ProductPropertyTwo
<a>
值作为属性附加到data-"ProductPropertyTwo"
元素
但接下来的两行似乎并没有遵循确切的模式,你有:
<a href="#" data-Value-01="yes">Product 02</a>
<a href="#" data-Value-01="yes" data-Value-02="yes">Product 03</a>
这两行没有data-Value-03="yes", data-Value-04="yes", etc.
您必须使用嵌套for循环,然后在循环结束时编写<a></a>
。 (但我发现你有按产品ID排序的数据,所以你可以在单循环中优化过程)
但是,请澄清输出示例。
根据您的澄清,最简单的解决方案我可以在5分钟内完成。这是&#34;伪代码&#34;或者不是伪代码:):
// Reason of using HashSet is so that we have only unique "ProductPropertyTwo" values for each product
Dictionary<String, HashSet<String>> myDictionary = new Dictionary<String, HashSet<String>>();
foreach(MyData.Product Product in my_ProductList)
{
// if we are putting the new product, then create empty HashSet and then add the ProductPropertyTwo value
if(myDictionary[Product.Name] == null){
myDictionary.add(Product.Name, new HashSet<String>());
myDictionary[Product.Name].add(Product.ProductPropertyTwo);
}else{ // if product is already in Dictionary just add the "ProductPropertyTwo" value to the HashSet
myDictionary[Product.Name].add(Product.ProductPropertyTwo);
}
}
从这里你可以再次遍历字典并检查你的其他表,然后你可以将属性追加到<a></a>
元素
答案 1 :(得分:0)
根据您提供的所需最终输出,您需要做的是
首先,按属性名称进行过滤(您已经这样做了。)
然后,按产品名称分组。
对于每个组,请格式化ProductPropertyTwo值以提供所需的输出。
最后,加入每个组的格式化输出。
代码段:
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductPropertyOne { get; set; }
public string ProductPropertyTwo { get; set; }
public int ProductSortOrder { get; set; }
}
var grouped = products.Where(p=> p.ProductPropertyOne=="Property-A").GroupBy(p => p.ProductName).Select(grp => string.Format("<a href=\"#\" {0} > {1} </a>",
string.Join(" ", grp.Select(v => string.Format("data-{0}=\"yes\" ",v.ProductPropertyTwo))),grp.Key)).ToList();
var finalOutput= string.Join(Environment.NewLine, grouped);