我正在努力实现这样的目标: 见图Here
其中类别列表(以及使用LINQ从数据库中提取各自目标的列表)
我在codebehind中尝试过:
DataClassesDataContext dc = new DataClassesDataContext();
var divcount = (from cnt in dc.dml_np_Categories
select cnt).Count();
int dv = Convert.ToInt32(divcount);
for (int i = 0; i < dv; i++)
{
DataClassesDataContext tb = new DataClassesDataContext();
var ctitle = (from cat in tb.dml_np_Categories
where cat.Pk_Category_Id == (i+1)
select cat.Category_Title);
HtmlGenericControl adddiv = new HtmlGenericControl("div");
adddiv.Attributes.Add("class", "category");
HtmlGenericControl addh3 = new HtmlGenericControl("h3");
addh3.Attributes.Add("class", "h3");
addh3.InnerText = ctitle.ToString();
catblock.Controls.Add(adddiv);
adddiv.Controls.Add(addh3);}
我得到以下输出!
参见图片here
我在数据库表中有3个类别,但正如您所看到的,它不是类别标题,而是显示一些sql。
此外,我不知道如何进一步将每个类别下的目标添加为超链接列表<li>
。
同样需要LINQ查询的帮助。
我知道我已经问了很多,但请帮助我。我正在学习阶段。我自己尝试了一整天,但无法获得理想的结果。
答案 0 :(得分:1)
您的代码存在一些问题,我会尝试指出它们。你的LINQ表达式返回一个查询,你调用.ToString()就可以得到上面的图像了。如果在查询上调用.First,它将返回结果中的第一项。我猜测查询中只会有一个结果。
//Move this outside of the for-loop
DataClassesDataContext tb = new DataClassesDataContext();
for (int i = 0; i < dv; i++)
{
var ctitle = (from cat in tb.dml_np_Categories
where cat.Pk_Category_Id == (i+1)
select cat.Category_Title).First();
HtmlGenericControl adddiv = new HtmlGenericControl("div");
adddiv.Attributes.Add("class", "category");
HtmlGenericControl addh3 = new HtmlGenericControl("h3");
addh3.Attributes.Add("class", "h3");
addh3.InnerText = ctitle.ToString();
catblock.Controls.Add(adddiv);
adddiv.Controls.Add(addh3);
}
答案 1 :(得分:1)
您可以使用一个查询简化当前代码,而不是两个(一个用于获取总标题数,另一个用于获取标题列表)。
DataClassesDataContext dc = new DataClassesDataContext();
var ctitle = (from cat in dc.dml_np_Categories
select cat.Category_Title);
foreach(string title in ctitle)
{
HtmlGenericControl adddiv = new HtmlGenericControl("div");
adddiv.Attributes.Add("class", "category");
HtmlGenericControl addh3 = new HtmlGenericControl("h3");
addh3.Attributes.Add("class", "h3");
addh3.InnerText = title;
catblock.Controls.Add(adddiv);
adddiv.Controls.Add(addh3);
}
关于另一个问题,关于如何显示每个类别的目标列表,最好是open new question。发布已经用于显示类别标题的最新代码,以及如何从数据库获取目标列表。因为那是另一个问题,目前我们无法对目标做任何说明(没有提供相关信息)。
答案 2 :(得分:0)
您的ctitle不是您想要的类型,这就是您添加ToString()的原因。你写这个
(from cat in tb.dml_np_Categories
where cat.Pk_Category_Id == (i+1)
select cat.Category_Title).FirstOrDefault();
但是做一堆数据库调用是个坏主意。你应该做唯一的,然后遍历结果。