Возвращает максимальную ширину столбца datatable для всех строк.
Я выполняю этот оператор SQL с помощью метода sqlclient:
select top 10 * from wlo_104466_CustomerPriceFile order by [UPC Code]Что, кажется, работает правильно.
Однако, когда я получаю максимальную ширину для каждого столбца, используя следующий код:
List<int> maximumLengthForColumns = Enumerable.Range(0, dataTable.Columns.Count) .Select(col => dataTable.AsEnumerable() .Select(row => row[col]).OfType<string>() .Max(val => val.Length)).ToList();Я получаю исключение: "последовательность не содержит элементов.
Однако я могу запустить следующий код на тех же датируемых результатах запроса:
foreach(DataRow row in dataTable.Rows) { foreach(var item in row.ItemArray) { Console.Write(item + ","); } Console.WriteLine(); }Я могу выписать каждую строку, поле за полем.
Следующий запрос, который исключает ограничение" топ-10", но в остальном является той же таблицей:
select * from wlo_104466_CustomerPriceFile order by [UPC Code]Отлично генерирует список maximumLengthForColumns.
Это данные, сгенерированные при выполнении первого запроса в среде Microsoft SQL Server Management Studio:
UPC Code Supplier Code Part No Pack Qty Unit of Measure ---------------- ------------- ------------- --------------- --------------- NULL HOB S228519T-P01 14 CTN NULL LIN ED031252 4SRP CTN NULL LIN ED031253 3.3SRP CTN NULL LIN ED031267 10.3CT CTN NULL LIN ED031269 11.9CT CTN NULL LIN ED031271 10.3CT CTN NULL LIN ED031288 3.7TB CTN NULL LIN ED031289 4.6TB CTN NULL LIN ED031290 3.5TB CTN NULL LIN ED031291 3.7TB CTN (10 row(s) affected)Мне нравится использовать чистый внешний вид кода Linq, и я хотел бы понять, что я делаю неправильно.
Спасибо за помощь.
Что я уже пробовал:
1) итерация через datatable с использованием цикла foreach, который, казалось, работал.
2) при трассировке через процедуру maximumLengthForColumns я заметил, что строка выполнения никогда не проходит мимо строки ".Select(row..." в запросе, который вызывает исключение, но опускается до строки ".Max(val..." в запросе, который это делает.
НОВЫЙ
Я попробовал использовать другую таблицу со всеми нулями в первом столбце:
C1 C2 C3 C4 C5 ---------- ---------- ---------- ---------- ---------- NULL 1C2 1C3 1C4 1C5 NULL 2C2 2C3 2C4 2C5 NULL 3C2 3C3 3C4 3C5 NULL 4C2 4C3 4C4 4C5 NULL 5C2 5C3 5C4 5C5 NULL 6C2 6C3 6C4 6C5 NULL 7C2 7C3 7C4 7C5 NULL 8C2 8C3 8C4 8C5 NULL 9C2 9C3 9C4 9C5
и запрос максимальной ширины не удался.
Затем я добавил 9 строк со всеми нулями во втором столбце:
C2 C3 C4 C5 ---------- ---------- ---------- ---------- ---------- NULL 1C2 1C3 1C4 1C5 NULL 2C2 2C3 2C4 2C5 NULL 3C2 3C3 3C4 3C5 NULL 4C2 4C3 4C4 4C5 NULL 5C2 5C3 5C4 5C5 NULL 6C2 6C3 6C4 6C5 NULL 7C2 7C3 7C4 7C5 NULL 8C2 8C3 8C4 8C5 NULL 9C2 9C3 9C4 9C5
и функция max преуспела, но она, казалось, проверяла только строки без нуля в первом столбце.
Затем я попробовал все нули во втором столбце:
C2 C3 C4 C5 ---------- ---------- ---------- ---------- ---------- 1C1 NULL 1C3 1C4 1C5 2C1 NULL 2C3 2C4 2C5 3C1 NULL 3C3 3C4 3C5 4C1 NULL 4C3 4C4 4C5 5C1 NULL 5C3 5C4 5C5 6C1 NULL 6C3 6C4 6C5 7C1 NULL 7C3 7C4 7C5 8C1 NULL 8C3 8C4 8C5 9C1 NULL 9C3 9C4 9C5и функция не сработала.
lw@zi
Вы ищете максимально допустимую длину в каждом столбце или данные с максимальной длиной для столбца в таблице?
SteveHolle
Я ищу максимальную длину в каждом столбце для целей отображения.