короткое объяснение:
Может быть, ваш метод, который терпит неудачу, выглядит следующим образом:
public static string GenerateWhereInListFromDataFail<T>(IEnumerable<T> dt_data, int columnIndex, string separator)
{
return string.Join(", ", dt_data.Select(tmp => separator + tmp[columnIndex].ToString() + separator));;
}
Итак, проблема в том, что у вас есть метод доступа к столбцу.Одним из решений проблемы может быть делегирование работы.
public static string GenerateWhereInListFromData<T>(IEnumerable<T> dt_data, Func<T, string> columnAccessor, string separator)
{
return string.Join(", ", dt_data.Select(tmp => separator + columnAccessor(tmp) + separator));;
}
Вызов метода выглядит следующим образом:
GenerateWhereInListFromData(new List<System.Data.DataRow>(), t => t[0].ToString(), ",");
Я надеюсь, что смогу вам помочь.
Отредактированная часть:
Чтобы ответить на вопрос в вашем комментарии.Вам не нужно определять некоторые другие методы для взаимодействия с различными типами.Вам просто нужно убедиться, что вы можете работать со всеми, как IEnumerable.
Может быть, какой-то код может объяснить то, что я пытаюсь сказать:
System.Data.DataSet dataSet = null;
var result = GenerateWhereInListFromData(dataSet.Tables.Cast<System.Data.DataTable>(), t => t.TableName, ",");
System.Data.DataTable dataTable = null;
result = GenerateWhereInListFromData(dataTable.Rows.Cast<System.Data.DataRow>(), t => t["SomeColumn"].ToString(), ",");
result = GenerateWhereInListFromData(dataTable.Columns.Cast<System.Data.DataColumn>(), t => t.ColumnName, ",");
Метод extention.Cast () делает работу оченьЧто ж.Он приводит все внутренние объекты к некоторому IEnumerable.
Таким образом, результаты могут выглядеть следующим образом:
Table1, Table2, Table3,
Value1, Value2, Value3,
Столбец1, Столбец2, Столбец3,