L oop через таблицы данных, чтобы найти совпадающие значения в одном столбце - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть таблица данных, которая в настоящее время отображает все записи из таблицы базы данных. Я использую asp. net и ado. net. Таблица заполняется хранимой процедурой, которая просто select * from table. Когда мое представление загружается, таблица заполняется всеми записями. Я хочу, чтобы таблица отображала только связанные записи одновременно, пока эти записи в таблице не будут авторизованы (приняты или отклонены, а затем записи вставлены в другие таблицы) или нажата кнопка «Далее». Эти записи будут сгруппированы по идентификатору. Какой идентификатор отображается первым при загрузке представления, зависит только от того, какой идентификатор первой записи.

Чтобы привести пример данных и того, как я хочу, чтобы они отображались: Все записи:

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

Первый идентификатор - 60 (AID), поэтому я хотел бы, чтобы через l oop В столбце найдите все AID60, отобразите их в виде, после того, как все они будут выполнены, он переместится в AID50 et c et c ...

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 l oop не работает. Идея состоит в том, чтобы получить AID первой записи в таблице, l oop через остаток столбца, ища тот же AID, и добавить все записи в список для отображения в представлении. После действия в представлении появится следующий AID. (У меня уже есть кнопки Accept / Reject / Next)

Мне просто нужно, чтобы foreach работал правильно, чтобы показывать только один AID за раз. Я не буду передавать AID в качестве параметра, поэтому Select * from Action where AID = @AID не будет работать.

1 Ответ

0 голосов
/ 07 апреля 2020
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>();
}
...