簡體   English   中英

查詢數據集中的2個數據表

[英]Querying 2 datatables in a dataset

我有兩個名為“ dst”和“ dst2”的數據表。 它們位於數據集“ urenmat”中。 數據的重要程度在“ dst”中。 但是,它包含一個名為“ werknemer”的列。 它包含一個與“ dst2”中特定行相對應的值。 該列名為“數字”。

我需要的是一種方法,可以將dst.werknemer和dst2.nummer鏈接的兩個數據表都進行外部聯接,並創建一個新的數據表,其中包含鏈接到dst.werknemer的'dst2.naam'以及其他所有列'dst'。

我到處都看過,但似乎仍然找不到正確的答案。 在這種情況下,有幾個站點提供了使用LINQ的方法。 我曾嘗試使用LINQ,但我對此並不熟練。

我嘗試使用101 LINQ示例: http : //code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

urenmat = dataset.
dst =  a, b, c, d, werknemer.
dst2 = nummer, naam.

我使用了來自“ 101”的以下代碼。

            var query =
            from contact in dst.AsEnumerable()
            join order in dst2.AsEnumerable()
            on contact.Field<string>("werknemer") equals
            order.Field<string>("nummer")
            select new
            {
                a = order.Field<string>("a"),
                b = order.Field<string>("b"),
                c = order.Field<string>("c"),
                d = order.Field<string>("d"),
                naam = contact.Field<decimal>("naam")};

但是,我不知道將“聯系”和“訂單”更改為什么,而且我似乎也找不到如何再次將其保存到數據表的方法。

我很抱歉,如果這些是愚蠢的問題,但我自己嘗試過解決,但看來我很愚蠢:P。 預先感謝您的幫助!

PS。 我正在使用C#進行編碼,輸入了數據集和數據表。

如果要生成與dst2dst左外連接的投影數據集,則可以使用此LINQ表達式(對不起,我並沒有真正在LINQ查詢語法中工作,因此必須改用lambda語法)。

var query = dst.AsEnumerable()
    .GroupJoin(dst2.AsEnumerable(), x => x.Field<string>("werknemer"), x => x.Field<string>("nummer"), (contact, orders) => new { contact, orders })
    .SelectMany(x => x.orders.DefaultIfEmpty(), (x, order) => new
    {
        a = order.Field<string>("a"),
        b = order.Field<string>("b"),
        c = order.Field<string>("c"),
        d = order.Field<string>("d"),
        naam = x.contact.Field<decimal>("naam")
    });

因為這是一個計划的數據集,您不能簡單地保存回數據表。 如果需要保存,則需要加載受影響的行,更新所需的字段,然后保存更改。

// untyped
var row = dst.Rows.Find(keyValue);
// typed
var row = dst.FindBy...(keyValue);

// update the field
row.SetField("a", "some value");
// save only this row's changes
row.AcceptChanges();

// or after all changes to the table have been made, save the table
dst.AcceptChanges();

通常,如果您需要執行(投影)數據的加載和保存,那么ORM(例如實體框架或LINQ-to-SQL)將是最好的工具。 但是,在這種情況下,您使用的是DataTable ,但我不確定是否可以將ORM鏈接到這些對象(盡管似乎可能)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM