0

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

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

4

3 回答 3

1

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

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


public IEnumerable GetColumnSize(IQueryable source)
{
  var types = MapTypeToMembers(source).Select(x => x.Type);
  return types.Select(x => MapTypeToSize(x));
}
于 2008-10-05T18:34:24.787 回答
1

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

于 2008-10-05T18:56:02.403 回答
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;
于 2008-10-07T22:42:06.687 回答