Как получить максимальный размер данных каждого столбца в IQueryable с использованием LINQ

У меня есть метод, который принимает IQueryable. Есть ли запрос LINQ, который вернет мне размер каждого столбца в IQueryable?

Чтобы быть более понятным: это Linq-to-objects. Я хочу получить длину ToString() каждого "столбца".

3 ответа

Решение

Это зависит. Если вы имеете в виду, есть ли совершенно общий способ сделать это определение, ответ будет отрицательным. Все, что IQueryable предоставит доступ - это Тип каждого выражения. Невозможно произвольно отобразить тип на размер столбца.

Если, с другой стороны, у вас есть возможность сопоставить тип с элементами и типом элемента с размером столбца, тогда да, есть способ получить размер.


public IEnumerable GetColumnSize(IQueryable source)
{
  var types = MapTypeToMembers(source).Select(x => x.Type);
  return types.Select(x => MapTypeToSize(x));
}

Я предполагаю, что вы говорите о LINQ-to-SQL. Он полностью игнорирует размеры столбцов. varchar(15), char(20) и nvarchar(max) - только строки для этого. Ошибка переполнения появится только на стороне SQL Server.

Вы сказали для каждого "столбца", что будет сопоставляться с каждым свойством. В Linq to Objects это должно работать, хотя и слишком вручную:

var lengths = from o in myObjectCollection
              select new 
              {
                 PropertyLength1 = o.Property1.ToString().Length,
                 PropertyLength2 = o.Property2.ToString().Length,
                 ...
              }

Если вы имели в виду длину ToString() каждого элемента ("строки") в коллекции, то:

var lengths = from o in myObjectCollection
              select o.ToString().Length;
Другие вопросы по тегам