使用LINQ在两个DataTable上交叉连接

时间:2012-11-29 06:45:25

标签: c# asp.net linq linq-to-sql

我在两个表上进行交叉连接时遇到问题。这是我的代码:

public DataTable JoinTable(DataTable piTable1, DataTable piTable2)
{
    if (piTable1 == null || piTable2 == null)
        return new DataTable();

    var joinResult = from parent in piTable1.Rows.Cast<DataRow>()
                     from child in piTable2.Rows.Cast<DataRow>()
                     select new {parent, child};

    return joinResult.CopyToDataTable();
}

我得到的结果为两个DataRowCollection,但它无法将其转换为DataTable。如何在两个DataTable上进行交叉连接?

3 个答案:

答案 0 :(得分:0)

您只需手动完成:
1)创建结果DataTable
2)从两个表中添加列(请记住,输入表中的列名可能具有保存名称,因此您需要约定来处理它 - 例如包括输入表名或smth)
3)并将值从连接结果实体复制到相应的列

答案 1 :(得分:0)

试试这种方式

public DataTable JoinTable(DataTable piTable1, DataTable piTable2)
{
    DataTable JoinTable = new DataTable();

    if (piTable1 == null || piTable2 == null)
        return new DataTable();

    var q = from parent in piTable1.AsEnumerable()
                     from child in piTable2.AsEnumerable()
                     select new 
                     {                                                      
                         property1 = parent.Field<T>("PropertyName1"),
                         property2 = parent.Field<T>("PropertyName2"),
                         property3 = child.Field<T>("PropertyName3"),
                         property4 = child.Field<T>("PropertyName4")
                     };

    JoinTable.Rows.Add(q);
    return JoinTable;
}

答案 2 :(得分:0)

我使用下面的代码对我有用。我不得不进一步将q转换为数组,然后列表然后表格,因为我无法将q直接转换为表格。以下是可能对某人有帮助的代码。

<?php

    add_action( 'wp_ajax_my_action', 'my_action' );

    function my_action() {

        global $wpdb;
        $id = $_POST['id_took'];
        $str = $_POST['sel'];
        $table_name_payment = $wpdb->prefix . "online_booking_system_model";
        if($whatever2=="Payment completed")
        {            
            $result_pay = $wpdb->query("UPDATE $table_name_payment SET 
            payment_status = $sel
            WHERE id = $id ");
            echo "success";            
        }       
    }
?>