C# 参数超出范围异常,参数名称:name
每次尝试使用不同的行执行以下代码时;获取相同的异常:C# 参数超出范围异常,参数名称:name,c#,linq,fastmember,C#,Linq,Fastmember,每次尝试使用不同的行执行以下代码时;获取相同的异常: var result = (from prod in context.ProductsTbls join img in context.ProductImagesTbls on prod.Id equals img.ProductId where prod.UserId == 4 &am
var result = (from prod in context.ProductsTbls
join img in context.ProductImagesTbls
on prod.Id equals img.ProductId
where prod.UserId == 4 && img.IsDefaultImage ==true
select new
{
Image = img.Image
}).ToList();
IEnumerable<Object> data = result.ToList();
DataTable table = new DataTable();
using (var reader = ObjectReader.Create(data , "Image"))
{
table.Load(reader); // Exception appears here
}
System.ArgumentOutOfRangeException: 'Specified argument was out of the range of valid values. Parameter name: name'
请帮助我解决这个问题。所以您使用的是第三方库,它旨在以比反射更快的方式动态访问类型成员 问题是您将集合强制转换为
IEnumerable
,因此所有类型信息都将消失,并且找不到成员名称Image
去掉这个石膏,没用的。您可以删除行
IEnumerable data=result.ToList()完整编码>并将结果
提供给ObjectReader
请发布堆栈跟踪。@JohnWu解决我的问题有什么重要意义?这是什么ObjectReader
?显示堆栈跟踪可能揭示了这一点。如果它是第三方的东西,它可能有一个bug。@GertArnold这是所谓的“Fast member”,我使用它将数据放入DataTable类,它与第三方无关。引发异常的Load()
方法没有名为name
的参数。因此,如果这是错误,我们需要查看最初是什么内部调用引发了异常,这样我们就可以知道哪些参数验证规则没有得到满足。请发布堆栈跟踪。我怎么注意不到这一点,谢谢,伙计,它工作了,我完全按照你的建议做了。