如何使用LINQ获取IQueryable中每列的最大数据大小

时间:2008-10-05 18:23:21

标签: linq linq-to-objects

我有一个采用IQueryable的方法。是否有一个LINQ查询可以返回IQueryable中每列的大小?

更清楚:这是Linq-to-objects。我想得到每个“列”的ToString()的长度。

3 个答案:

答案 0 :(得分:1)

这取决于。如果你的意思是有一个完全通用的方法来做出这个决定,答案是否定的。所有IQueryable都将提供访问权限是每个表达式的类型。无法将Type任意映射到列大小。

另一方面,如果您能够将类型映射到成员和成员类型到列大小,那么有一种方法可以获得大小。


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

答案 1 :(得分:1)

我猜你在谈论LINQ-to-SQL。它完全忽略了列大小。 varchar(15),char(20)和nvarchar(max)只是它的字符串。溢出错误仅出现在SQL Server端。

答案 2 :(得分:0)

你说的每个“列”都会映射到每个属性。在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;