Как получить максимальный размер данных каждого столбца в 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;