1

2 つの Datatable を同じ行にマージするにはどうすればよいですか。データセットにデータを取得するために、さまざまなストアド プロシージャを使用しています。c#を使用するasp.netでは、それらをマージしたいので、テーブル1と同じ数の行があり、テーブル2から列が追加されています。

例えば:

DataTable table1 = dsnew.Tables[0];
DataTable table2 = dsSpotsLeft.Tables[0];
table1.Merge(table2);

これにより、2 行ではなく 4 行が取得されます。ここで何が欠けていますか?前もって感謝します!!

4

3 に答える 3

5

この場合、この方法は使用できませんMerge。代わりに、新しいDataTabledt3 を作成し、テーブル 1 と 2 に基づいて列と行を追加する必要があります。

var dt3 = new DataTable();

var columns = dt1.Columns.Cast<DataColumn>()
                  .Concat(dt2.Columns.Cast<DataColumn>());

foreach (var column in columns)
{
    dt3.Columns.Add(column.ColumnName, column.DataType);
}

//TODO Check if dt2 has more rows than dt1...
for (int i = 0; i < dt1.Rows.Count; i++)
{
    var row = dt3.NewRow();
    row.ItemArray = dt1.Rows[i].ItemArray
                       .Concat(dt2.Rows[i].ItemArray).ToArray();

    dt3.Rows.Add(row);
}
于 2012-09-28T06:28:17.600 に答える
1

これらのテーブルの設計について詳しく知らないため、これらの一部は憶測です。

あなたが実行したいように聞こえるのはJOIN. たとえば、次のようなテーブルが 1 つあるとします。

StateId, StateName

次のような別のテーブル

EmployeeId, EmployeeName, StateId

そして、あなたは次のような結果セットになりたいと思っています

EmployeeId, EmployeeName, StateId, StateName

次のクエリを実行します。

SELECT Employee.EmployeeId, Employee.EmployeeName, Employee.StateId, State.StateName
FROM Employee
INNER JOIN State ON Employee.StateId = State.StateId

これにより結果セットが得られますが、データは更新されません。繰り返しますが、データセットを推測すると、Employee テーブルのバージョンは結果セットのようになると思います。

EmployeeId, EmployeeName, StateId, StateName

しかし、StateName移入する必要があります。この場合、クエリを次のように記述できます。

UPDATE Employee
SET Employee.StateName = State.StateName
FROM Employee
INNER JOIN State ON Employee.StateId = State.StateId

SQL Server でテスト済み。

于 2012-09-27T19:26:05.113 に答える
1

テーブルがCategoryあり、Productによって関連付けられていると仮定してCategoryID、これを試してください

var joined = from p in prod.AsEnumerable()
             join c in categ.AsEnumerable()
             on p["categid"] equals c["categid"]
             select new
             {
                 ProductName = p["prodname"],
                 Category = c["name"]
             };

var myjoined = joined.ToList();

ソース

それがLINQソリューションでした。最初のデータテーブルをループして、2 番目のデータテーブルから列を追加することもできます

于 2012-09-28T01:38:15.633 に答える