从c#.net中选择并选择

时间:2010-12-01 07:51:15

标签: c# .net join datatable

任何人都可以告诉我如何在下面给出的select语句中指定特定列:

var combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable()
                   join dt2 in DsResults.Tables[1].AsEnumerable()
                     on dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName")
                   select new { dt1, dt2 };

DataTable finaldt = new DataTable("FinalTable");
finaldt.Columns.Add(new DataColumn("sp", typeof(string)));
finaldt.Columns.Add(new DataColumn("Method", typeof(string)));
finaldt.Columns.Add(new DataColumn("Class", typeof(string)));
finaldt.Columns.Add(new DataColumn("BLLMethod", typeof(string)));
DataRow newrow = finaldt.NewRow();           
foreach (var row in combinedrows)
{

    DataRow dataRow = finaldt.NewRow();
    dataRow.ItemArray = row.dt1.ItemArray;

     finaldt.Rows.Add(dataRow);
}

5 个答案:

答案 0 :(得分:1)

如果要指定要选择的列,则应尝试更改

combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable() join
dt2 in DsResults.Tables[1].AsEnumerable() on dt1.Field("MethodName") equals
dt2.Field("MethodName") select new { dt1, dt2 };

in

combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable() join
dt2 in DsResults.Tables[1].AsEnumerable() on dt1.Field("MethodName") equals
dt2.Field("MethodName") select new 
{
     dt1.columnName;
     dt2.columnName2;
     dt2.columnName3;
     etc.
}

希望这是你想要的。

您可以查看LinQ-CheatSheet

答案 1 :(得分:0)

嗯,这不是很清楚你想要什么,但也许这样呢?

var combinedRows = from dt1 in DsResults.Tables[0].AsEnumerable()
                   join dt2 in DsResults.Tables[1].AsEnumerable()
                     on dt1.Field<string>("MethodName") 
                     equals dt2.Field<string>("MethodName")
                   select new { MethodName = dt1.Field<string>("MethodName"),
                                Foo = dt2.Field<string>("Foo"),
                                Bar = dt1.Field<int>("Bar") };

答案 2 :(得分:0)

不确定你的问题是什么...... linq查询是dsResults.Tables [0]和dsResults.Tables [1]之间基于MethodName字段的常规连接。

你想做什么?

答案 3 :(得分:0)

请阅读您的评论。我想你想要的不是一个联接,而是以下几个:

var combinedrows = 
    from dt1 in DsResults.Tables[0].AsEnumerable()
    from dt2 in DsResults.Tables[1].AsEnumerable()
    where dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName")
    select new { dt1, dt2 };

它从两个具有相同“MethodName”的表中返回ony行。

答案 4 :(得分:0)

@Prem:使用此代码工作正常,请查看。

var combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable()
                              join dt2 in DsResults.Tables[1].AsEnumerable() on        dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName")
                           select new { sp = dt1.Field<string>("Tab1_col1"), Method = dt1.Field<string>("MethodName"), _class = dt1.Field<string>("Class"),
                                        BLLMethod = dt1.Field<string>("Tab2_col2")
                           }; 


        DataTable finaldt = new DataTable("FinalTable");
        finaldt.Columns.Add(new DataColumn("sp", typeof(string)));
        finaldt.Columns.Add(new DataColumn("Method", typeof(string)));
        finaldt.Columns.Add(new DataColumn("Class", typeof(string)));
        finaldt.Columns.Add(new DataColumn("BLLMethod", typeof(string)));
        DataRow newrow = finaldt.NewRow();           
        foreach (var row in combinedrows)
        {
            DataRow dr = finaldt.NewRow();
            dr["sp"] = row.sp;
            dr["Method"] = row.Method;
            dr["Class"] = row._class;
            dr["BLLMethod"] = row.BLLMethod;
            finaldt.Rows.Add(dr);
        }