Linq2Sql Исключение «Недопустимый тип доступа для члена» - PullRequest
3 голосов
/ 16 сентября 2011

У меня есть статический класс со скомпилированными запросами, и я хочу повторно использовать некоторые из подзапросов.Поэтому я извлекаю общую часть в статическое свойство и затем ссылаюсь на него в нескольких запросах:

public static class Query {
    // common part
    static Func<MyDataContext, string, IQueryable<UserAccount>> accounts = 
        (db, cID) => db.UserAccount
                .Where(x => x.XRef.cID == cID && bla-bla-bla);

    // one of queries that reuse 'accounts' part
    public static readonly Func<MyDataContext, string, string, bool> CheckClientIdentity =
        CompiledQuery.Compile<MyDataContext, string, string, bool>(
            (db, cID, identityName) => accounts(db, cID)
                .Any(x => x.IdentityName == identityName)
        );
}

Это компилируется просто отлично, но во время выполнения я получаю

System.InvalidOperationException: Доступ к элементу 'System.String IdentityName' из 'UserAccount' недопустим для типа 'System.Linq.IQueryable`1 [UserAccount].

В этом случае не исключение

public static readonly Func<MyDataContext, string, string, bool> CheckClientIdentity =
    CompiledQuery.Compile<MyDataContext, string, string, bool>(
        (db, cID, identityName) => db.UserAccount
            .Where(x => x.XRef.cID == cID && bla-bla-bla)
            .Any(x => x.IdentityName == identityName)
    );

Почему?Есть обходной путь?

...