IQueryable を取るメソッドがあります。IQueryable の各列のサイズを返す LINQ クエリはありますか?
より明確にするために、これはLinq-to-objectsです。各「列」の ToString() の長さを取得したい。
IQueryable を取るメソッドがあります。IQueryable の各列のサイズを返す LINQ クエリはありますか?
より明確にするために、これはLinq-to-objectsです。各「列」の ToString() の長さを取得したい。
LINQ-to-SQL について話していると思います。列のサイズは完全に無視されます。varchar(15)、char(20)、および nvarchar(max) は単なる文字列です。オーバーフロー エラーは、SQL Server 側でのみ表示されます。
場合によります。この決定を行うための完全に一般的な方法があるということであれば、答えはノーです。IQueryable がアクセスできるのは、各式の Type だけです。Type を任意に列サイズにマップする方法はありません。
一方、タイプをメンバーに、メンバー型を列サイズにマップする機能がある場合は、サイズを取得する方法があります。
public IEnumerable GetColumnSize(IQueryable source)
{
var types = MapTypeToMembers(source).Select(x => x.Type);
return types.Select(x => MapTypeToSize(x));
}
「列」ごとに、各プロパティにマップすると言いました。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;