繁体   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