C# Asp.Net上具有相关列的DataTable数据列表
我在SQL中有下表:C# Asp.Net上具有相关列的DataTable数据列表,c#,asp.net,sql-server,linq,foreach,C#,Asp.net,Sql Server,Linq,Foreach,我在SQL中有下表: PARENT_CODE CHILD_CODE ATTRIBUTE_NAME ATTRIBUTE_DESCRIPT R_YEAR ------------- ------------ -------------- ------------------ ----------- 1 001 ATT1 Description1 2016 1
PARENT_CODE CHILD_CODE ATTRIBUTE_NAME ATTRIBUTE_DESCRIPT R_YEAR
------------- ------------ -------------- ------------------ -----------
1 001 ATT1 Description1 2016
1 001 ATT2 Description2 2016
1 001 ATT3 Description3 2016
1 001 ATT4 Description4 2016
1 001 ATT5 Description5 2016
1 001 ATT6 Description6 2016
1 002 ATT1 Description1 2016
1 002 ATT2 Description2 2016
1 002 ATT3 Description3 2016
1 002 ATT4 Description4 2016
2 003 ATT1 Description1 2016
2 003 ATT2 Description2 2016
2 003 ATT3 Description3 2016
2 003 ATT4 Description4 2016
如何以下面的格式显示输出
1 - 001 :
ATT1 : Description1
ATT2 : Description2
ATT3 : Description3
ATT4 : Description4
ATT5 : Description5
ATT6 : Description6
1 - 002 :
ATT1 : Description1
ATT2 : Description2
ATT3 : Description3
ATT4 : Description4
2 - 003 :
ATT1 : Description1
ATT1 : Description2
ATT1 : Description3
ATT1 : Description4
我知道我们可以使用LinQ或foreach循环来获得结果,但我不知道如何继续
下面是我的代码:
string[] seledItems = ConvertLib.ToStr(Request.Form["sel_items[]"], string.Empty).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
string GetQUeryStr = string.Format(@"SELECT PARENT_CODE,CHILD_CODE,ATTRIBUTE_NAME,ATTRIBUTE_DESCRIPT,R_YEAR FROM JOBPATTERN
WHERE R_YEAR='{0}' AND PARENT_CODE IN ({1})", ddlYears.SelectedValue, string.Join(",", seledItems.Select(q => string.Format("'{0}'", q)).ToArray()));
using (SqlConnection conn = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand(GetQUeryStr, conn))
{
DataTable dt = new DataTable();
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
foreach(var item in list)
{
// then how can i write this part
}
}
}
我在上面添加了代码以供参考 根据您想要的输入格式,我知道您想要按多个列进行分组,并且每个键下都有匹配项的列表 使用linq查询语法:
var result = (from item in dt
group new { item.ATTRIBUTE_NAME, item.ATTRIBUTE_DESCRIPT }
by new { item.PARENT_CODE, item.CHILD_COD } into g
select new
{
g.Key,
Items = g.ToList();
});
在方法语法中:
var result = dt.GroupBy(item => new { item.ATTRIBUTE_NAME, item.ATTRIBUTE_DESCRIPT }
(key, group) => new
{
key,
Items = group.Select(item => new { item.PARENT_CODE, item.CHILD_COD }).ToList()
});
最后但并非最不重要的一点-请不要使用字符串关联来构建sql查询。它容易受到SQL注入的影响。使用参数化查询,而不是按您想要的输入格式进行查询。我知道您想要按多个列进行分组,并且每个键下面都有匹配项的列表 使用linq查询语法:
var result = (from item in dt
group new { item.ATTRIBUTE_NAME, item.ATTRIBUTE_DESCRIPT }
by new { item.PARENT_CODE, item.CHILD_COD } into g
select new
{
g.Key,
Items = g.ToList();
});
在方法语法中:
var result = dt.GroupBy(item => new { item.ATTRIBUTE_NAME, item.ATTRIBUTE_DESCRIPT }
(key, group) => new
{
key,
Items = group.Select(item => new { item.PARENT_CODE, item.CHILD_COD }).ToList()
});
最后但并非最不重要的一点-请不要使用字符串关联来构建sql查询。它容易受到SQL注入的影响。改为使用参数化查询这可以通过基本linq完成-您是否查看了
GroupBy
?请显示您一直在尝试和搜索的内容我只想做相同的父id和子id数据组,然后如上所示显示我已用上述数据填充数据表。然后需要分组。已经在问题部分添加了我的代码。使用到ChildCode摸索它相同的家长将有不同的孩子。因此,使用child_代码需要对它进行分组可以使用基本linq完成-您是否查看了GroupBy
?请显示您一直在尝试和搜索的内容我只想做相同的父id和子id数据组,然后如上所示显示我已用上述数据填充数据表。然后需要分组。已经在问题部分添加了我的代码。使用到ChildCode摸索它相同的家长将有不同的孩子。因此,使用child_代码将其分组