Subsonic 3.x:查询时的ArgumentException(LINQ)

时间:2009-11-28 00:38:46

标签: c# linq subsonic3

即使像

这样的简单查询
EmmaDatabase.EmmaDB ec = DatabaseProvider.GetEmmaDatabase();
var changes = (from o in ec.dbCachedChanges
                           select o);

在迭代时抛出一个ArgumentException(参数类型不匹配)。 Stacktrace只包含

at System.Linq.Expressions.Expression.Bind(MemberInfo member, Expression expression)

这完全没有帮助我。我不知道为什么会造成这种情况,在这里找不到任何东西,也不会用谷歌搜索。

编辑:异常根本不会改变结果,例外只是吃饭时间。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:2)

解决了,不是破坏者,只是例外编码。

Subsonic.Core.Linq.Structures.QueryMapping.cs:155

if (me != null)
{
    try {
            bindings.Add(Expression.Bind(mi, me));
    } catch {
        //this is only here until I rewrite this whole thing
    }
}

可以通过

解决
if (me != null)
{
    try {
        if (mi is PropertyInfo && ((PropertyInfo)mi).PropertyType.IsAssignableFrom(me.Type))
            bindings.Add(Expression.Bind(mi, me));
        else if (mi is FieldInfo && ((FieldInfo)mi).FieldType.IsAssignableFrom(me.Type))
            bindings.Add(Expression.Bind(mi, me));
    } catch {
        //this is only here until I rewrite this whole thing
    }
}

因为QueryMapper.GetMappedMembers()返回一个只包含PropertyInfos和FieldInfos的列表。