我需要支持旧客户端并从我们的 Linq 查询中组合 ADO 数据集。问题是如何获取使用反射无法获得的特定列信息(varchar 长度、十进制精度等)。
例如,我有表Customer字段名称为 varchar(80)
当我从 linq 获取数据到实体查询时:
var data = (from c in ctx.Customers select c.Name).ToList()
我无法获取maxSize
该列data[i].Name
并且 adodataset 引发错误。
我已经有了简单的解决方案:
- 通过属性引用从 ObjectContext 中提取列元数据的代码
- 从 Queryable 解析表达式并将输出属性链接到 edm 列的简单代码。
但是我在解析复杂查询时遇到了很多问题,这些查询包括多个嵌套的 groupbys/unions/joins 等。
有没有人知道任何其他方式(可能使用物化整形器或类似方法)?