【问题标题】:DataTable Data List with Related Column on Asp.Net在 Asp.Net 上具有相关列的 DataTable 数据列表
【发布时间】:2017-01-02 16:38:54
【问题描述】:

我在 SQL 中有下表:

 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 来完成 - 你看过 GroupBy 吗?请展示您一直在尝试和搜索的内容
  • 我只是想做相同的父ID和相同的子ID数据组然后像上面那样显示
  • 我已经用上述数据填充了数据表。然后需要分组。
  • 已经在问题部分添加了我的代码。
  • 使用 ChildCode 摸索它相同的父母会有不同的孩子。所以,使用 to child_code 需要对其进行分组

标签: c# asp.net sql-server linq foreach


【解决方案1】:

根据您想要的输入格式,我了解您希望按多列分组,并且每个键都有匹配项的列表。

使用 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 注入的影响。改用参数化查询

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多