У меня есть список, заполненный огромным количеством данных и более ста столбцов. Мне нужно будет преобразовать весь список в DataTable и использовать SQLBulkCopy
для пакетной вставки всех данных в базу данных.
Все в порядке, за исключением того, что некоторые поля могут быть пустыми. По какой-то причине некоторые из пустых полей вызывают некоторое исключение форматирования после преобразования в DataTable и во SQLBulkCopy
вставки SQLBulkCopy
. После некоторых исследований и разработок я обнаружил, что преобразование пустых полей в NULL решает проблему для пакетной вставки с помощью SQLBulkCopy
.
Есть ли способ использовать LINQ для поиска пустых полей в списке и конвертировать их в NULL или DBNULL, прежде чем преобразовать список в DataTable?
Несмотря на то, что я собираюсь преобразовать список в DataTable, но я не хочу зацикливать каждую строку и каждую ячейку, чтобы проверить, является ли ячейка пустой и преобразовать в нуль, поскольку она может сильно повлиять на производительность, когда данные слишком велики ,
Я могу ответить только на первую часть, где вы можете заменить все пустые строковые поля значением Null с помощью условного выражения
public class Person
{
public string Sex { get; set; }
public string Name { get; set; }
}
private static void LinQ3()
{
var namesList = new List<Person>();
namesList.Add(new Person() { Sex = "M", Name = "Jonh" });
namesList.Add(new Person() { Sex = "F", Name = string.Empty });
namesList.Add(new Person() { Sex = "M", Name = string.Empty });
var nullV = namesList.Select(x => new {
Sex=x.Sex,
nullableName= string.IsNullOrWhiteSpace(x.Name)?null: x.Name
});
}
Это вернет список (nullV), где поле «Имя» будет содержать нулевые значения для каждого пустого значения имени поля. Кроме того, вы должны объявить каждое поле, которое вы хотите преобразовать пустые строки, используя тот же условный оператор