У меня есть статический класс со скомпилированными запросами, и я хочу повторно использовать некоторые из подзапросов.Поэтому я извлекаю общую часть в статическое свойство и затем ссылаюсь на него в нескольких запросах:
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)
);
Почему?Есть обходной путь?