レガシークライアントをサポートし、LinqクエリからADOデータセットを作成する必要があります。問題は、リフレクションでは取得できない特定の列情報(varcharの長さ、小数の精度など)を取得する方法です。
たとえば、フィールド名varchar(80)のテーブルCustomerがあります。
linqからエンティティクエリにデータをフェッチすると、次のようになります。
var data = (from c in ctx.Customers select c.Name).ToList()
maxSize
列を取得できずdata[i].Name
、adodatasetでエラーが発生します。
私はすでに簡単な解決策を持っています:
- プロパティ参照によってObjectContextから列メタデータを抽出するコード
- Queryableから式を解析し、出力プロパティをedm列にリンクする単純なコード。
しかし、ネストされた複数のgroupby / unions/joinsなどを含む複雑なクエリの解析には多くの問題があります。
誰か他の方法を知っていますか(おそらくマテリアライゼーションシェイパーなどを使用しています)?