我有一个需要IQueryable的方法。是否有一个 LINQ 查询可以让我返回 IQueryable 中每一列的大小?
更清楚的是:这是Linq-to-objects。 我想获取每个"列"的 ToString() 的长度。
这取决于。 如果你的意思是有没有一种完全通用的方法来做出这个决定,答案是否定的。 IQueryable 将提供的所有访问权限是每个表达式的类型。 无法将 Type 任意映射到列大小。
另一方面,如果您能够将类型映射到成员并将成员类型映射到列大小,那么是的,有一种方法可以获取大小。
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 Object 中,这应该可以工作,尽管过于手动:
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;