【问题标题】:Loop through datatables to find matching values in one column循环遍历数据表以在一列中查找匹配值
【发布时间】:2020-04-07 02:10:47
【问题描述】:

我有一个数据表,它当前显示数据库表中的所有记录。我正在使用 asp.net 和 ado.net。该表由简单的select * from table 存储过程填充。当我的视图加载时,表中会填充所有记录。我希望表一次只显示相关记录,直到表中的这些记录已被授权(接受或拒绝,然后将记录插入其他表)或单击“下一步”按钮。这些记录将按 ID 分组。视图加载时首先显示的 ID 仅取决于第一个记录 ID 是什么。

举一个数据示例以及我希望它如何显示: 所有记录:

PageID   AID   Name
1        60    Book1
2        60    Book7
3        50    Book7
4        60    Book8
5        70    Book12
6        70    Book7

第一个 ID 是 60(AID),所以我希望它遍历列,找到所有 AID60,将它们显示在视图中,一旦全部执行完毕,它将移动到 AID50 等...

PageID   AID   Name
1        60    Book1
2        60    Book7
4        60    Book8

我目前在控制器中获取记录的是:

public ActionResult toAction()
{

SqlConnection con = new SqlConnection();
con = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionstringpath"].ToString());

List<ActionModel> AList = new List<ActionModel>();
SqlCommand com = new SqlCommand("Action", con);
com.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(com);
DataTable dt = new DataTable();
con.Open();
da.Fill(dt);
con.Close();


foreach (DataRow dtRow in dt.Rows)
{
    string CurrentAID = dtRow["AID"].ToString();

    if (dtRow["AID"].ToString().Equals(CurrentAID))
   {


AList = (from DataRow dr in dt.Rows

                 select new ActionModel()
                 {
                     PageID = Convert.ToInt32(dr["PageID"]),
                     AID = Convert.ToInt32(dr["AID"]),
                     Name = Convert.ToString(dr["Name"])

                 }).ToList();
 }
}



return View(AList);
}

我知道上面的代码不正确,因为 foreach 循环不起作用。这个想法是 获取表中第一条记录的 AID,遍历列的其余部分以查找相同的 AID,并将所有记录添加到列表中以显示到视图中。在视图中执行操作后,将填充下一个 AID。 (我已经有接受/拒绝/下一步按钮)

我只需要让 foreach 正常工作,一次只显示一个 AID。我不会将 AID 作为参数传递,因此 Select * from Action where AID = @AID 之类的方法将不起作用。

【问题讨论】:

    标签: c# sql sql-server asp.net-mvc-4 ado.net


    【解决方案1】:
    public ActionModel toAction()
    {
        SqlConnection con = new SqlConnection();
        con = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionstringpath"].ToString());
    
        SqlCommand com = new SqlCommand("Action", con);
        com.CommandType = CommandType.StoredProcedure;
        SqlDataAdapter da = new SqlDataAdapter(com);
        DataTable dt = new DataTable();
        con.Open();
        da.Fill(dt);
        con.Close();
        return dt.Select("AID = 60").ToList<ActionModel>();
    }
    

    【讨论】:

    • 嗨,@Sina 我需要知道 ID 才能这样做吗?这个想法是我不知道第一个 ID 是什么,所以我需要它来识别第一个 ID,然后遍历列,找到匹配的 ID 并将所有内容添加到列表中以显示到视图
    • @Deirdreso12 抱歉。我不明白
    • 而不是像上面那样将其设置为某个 AID,我需要它来将值设置为第一行中的 AID...这将不断变化。因此,我需要将第一个数据行中的 AID 值设置为一个变量,然后将该变量传递给 dt.Select() 以遍历行并找到具有该值 AID 的匹配行。就像我在上面的例子中展示的那样。我上面给出的数据是模拟数据,我有成千上万条记录的表,我不知道任何 AID。像这样的东西(不起作用)
    • DataRow 行 = dt.Rows[0];字符串 rowValue = row["UID"].ToString(); return dt.Select(rowValue).ToList();
    猜你喜欢
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2022-08-17
    • 2023-01-19
    • 1970-01-01
    • 2014-09-23
    相关资源
    最近更新 更多