из и выберите в c # .net? - PullRequest
       14

из и выберите в c # .net?

0 голосов
/ 01 декабря 2010

Может кто-нибудь. Подскажите, пожалуйста, как указать конкретный столбец в приведенном ниже утверждении выбора:

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 ]

1 голос
/ 01 декабря 2010

Если вы хотите указать столбцы, которые хотите выбрать, попробуйте изменить

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 };

в

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

0 голосов
/ 01 декабря 2010

@ 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);
        }
0 голосов
/ 01 декабря 2010

Просто прочитайте ваш комментарий.Я думаю, что вы хотите не объединение, а следующее:

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».

0 голосов
/ 01 декабря 2010

Не уверен, что ваш вопрос ... Запрос linq - это обычное соединение между dsResults.Tables [0] и dsResults.Tables [1] на основе поля MethodName.

Что вы пытаетесьделать?

0 голосов
/ 01 декабря 2010

Ну, не совсем понятно, что вы хотите, но что-то вроде этого, возможно?

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") };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...