Subsonic 3.x: ArgumentException при запросе (LINQ) - PullRequest
0 голосов
/ 28 ноября 2009

Даже простой запрос типа

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 Ответ

2 голосов
/ 02 декабря 2009

Решено, не прерыватель, просто кодирование по исключению.

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.

...