Присоединяйтесь к Datatables из цикла и объедините в один набор данных - PullRequest
1 голос
/ 30 июня 2011

У меня есть это требование, чтобы пользователь запрашивал один или несколько номеров. И мне нужно отобразить весь результат в одном наборе данных

Пример: запрос серийных номеров с

PartNumber  Required Quantity
   A               2  
   B               1
   C               3

Код:

// Loop Request

foreach (DataRow a in request.Rows)
{
   //select top(Quantity) SerialNumber,PartNumber where PartNumber=@PartNumber
   var dt = new DataTable();
} 

// 1.PartNumber A

     SerialNumber  Partnumber
1                A
2                A

+

// 2.PartNumber B

     SerialNumber  Partnumber
1                B

// 3.PartNumber C

     SerialNumber  Partnumber
1                C
2                C
3                C

// Загрузка в DataSet

И результат будет примерно таким:

SerialNumber  Partnumber
1                A
2                A
1                B   
1                C
2                C
3                C 

Спасибо с уважением

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Я не уверен, к каким двум таблицам вы хотите присоединиться, и по какому ключу, но не смотря на это, самым простым способом будет использование LINQ to Dataset.Например,

var query = from a in table1
            join
            b in table2 
            on
            a.FkColumn = b.PKColumn select a,b;
0 голосов
/ 30 июня 2011

Пожалуйста, проверьте ниже логика:

DataTable myDataTable = new DataTable();
        DataColumn PartNumber = new DataColumn("PartNumber");
        DataColumn RequiredQuantity = new DataColumn("RequiredQuantity");
        myDataTable.Columns.Add(PartNumber);
        myDataTable.Columns.Add(RequiredQuantity);

        DataRow dataRowPN1 = myDataTable.NewRow();
        DataRow dataRowPN2 = myDataTable.NewRow();
        DataRow dataRowPN3 = myDataTable.NewRow();


        dataRowPN1["PartNumber"] = "A";
        dataRowPN2["PartNumber"] = "B";
        dataRowPN3["PartNumber"] = "C";
        dataRowPN1["RequiredQuantity"] = "2";
        dataRowPN2["RequiredQuantity"] = "1";
        dataRowPN3["RequiredQuantity"] = "3";
        myDataTable.Rows.Add(dataRowPN1);
        myDataTable.Rows.Add(dataRowPN2);
        myDataTable.Rows.Add(dataRowPN3);
        int  i = myDataTable.Rows.Count;

        DataTable joinDataTable = new DataTable();
        DataColumn SerialNumber = new DataColumn("SerialNumber");
        DataColumn JoinPartNumber = new DataColumn("PartNumber");
        joinDataTable.Columns.Add(SerialNumber);
        joinDataTable.Columns.Add(JoinPartNumber);
        foreach (DataRow dr in myDataTable.Rows)
        {
            for (int count = 1; count <= Convert.ToInt16(dr["RequiredQuantity"]); count++)
            {
                DataRow joindataRow = joinDataTable.NewRow();
                joindataRow["SerialNumber"] = count.ToString().Trim();
                joindataRow["PartNumber"] = dr["PartNumber"].ToString().Trim();
                joinDataTable.Rows.Add(joindataRow);
            }
        }
        Response.Write(joinDataTable.Rows.Count);  
...