Print Page | Close Window

Long error on join with where...

Printed From: IdeaBlade
Category: DevForce
Forum Name: DevForce 2010
Forum Discription: For .NET 4.0
URL: http://www.ideablade.com/forum/forum_posts.asp?TID=1793
Printed Date: 21-Apr-2026 at 10:39am


Topic: Long error on join with where...
Posted By: jsobell
Subject: Long error on join with where...
Date Posted: 06-May-2010 at 4:12pm
Trying a relatively simple query with a join, but adding a Where clause causes a MethodAccessException:

            Guid gid = custacct.CustomerAccountID;
            IEntityQuery<UserProfile> query =
                from users in RepositoryDomainContext.UserProfiles
                join p in RepositoryDomainContext.Permissions
                on users.UserProfileId equals p.UserProfileId
                where p.ElementID == gid
                select users;

            RepositoryDomainContext.ExecuteQueryAsync(query, cb => callback(cb.Results), null);

this results in the exception below.
Removing the where works perfectly, as does restructuring the query:

            IEntityQuery<UserProfile> query =
                from users in RepositoryDomainContext.UserProfiles
                join p in RepositoryDomainContext.Permissions.Where(pp => pp.ElementID == gid)
                on users.UserProfileId equals p.UserProfileId
                select users;

Any suggestions?

Cheers,
 Jason

Exception:
{System.MethodAccessException: Attempt by method 'System.Linq.Expressions.Expression.CreateLambda(System.Type, System.Linq.Expressions.Expression, System.String, Boolean, System.Collections.ObjectModel.ReadOnlyCollection`1<System.Linq.Expressions.ParameterExpression>)' to access method 'System.Linq.Expressions.Expression`1<System.Func`2<<>f__AnonymousType0`2<QuestMetrics.Manager.Model.Data.UserProfile,QuestMetrics.Manager.Model.Data.Permission>,System.Boolean>>.Create(System.Linq.Expressions.Expression, System.String, Boolean, System.Collections.ObjectModel.ReadOnlyCollection`1<System.Linq.Expressions.ParameterExpression>)' failed.
   at System.RuntimeMethodHandle.PerformSecurityCheck(Object obj, RuntimeMethodHandleInternal method, RuntimeType parent, UInt32 invocationFlags)
   at System.RuntimeMethodHandle.PerformSecurityCheck(Object obj, IRuntimeMethodInfo method, RuntimeType parent, UInt32 invocationFlags)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Linq.Expressions.Expression.CreateLambda(Type delegateType, Expression body, String name, Boolean tailCall, ReadOnlyCollection`1 parameters)
   at System.Linq.Expressions.Expression.Lambda(Type delegateType, Expression body, String name, Boolean tailCall, IEnumerable`1 parameters)
   at System.Linq.Expressions.Expression.Lambda(Type delegateType, Expression body, ParameterExpression[] parameters)
   at IdeaBlade.Linq.TransformExpressionVisitor.VisitLambda(LambdaExpression le, Expression bodyExpr, IEnumerable`1 parameterExpressions)
   at IdeaBlade.Linq.ExpressionVisitor.VisitExpressionCore(Expression e)
   at IdeaBlade.Linq.TransformExpressionVisitor.VisitExpressionCore(Expression expr)
   at IdeaBlade.Linq.LocalizingExpressionVisitor.VisitExpressionCore(Expression expr)
   at IdeaBlade.Linq.ExpressionVisitor.VisitExpression(Expression expr)
   at IdeaBlade.Linq.ExpressionVisitor.VisitExpressionCore(Expression e)
   at IdeaBlade.Linq.TransformExpressionVisitor.VisitExpressionCore(Expression expr)
   at IdeaBlade.Linq.LocalizingExpressionVisitor.VisitExpressionCore(Expression expr)
   at IdeaBlade.Linq.ExpressionVisitor.VisitExpression(Expression expr)
   at IdeaBlade.Linq.ExpressionVisitor.<VisitExpressions>b__0(Expression e)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at IdeaBlade.Linq.ExpressionVisitor.VisitExpressions(IEnumerable`1 expressions)
   at IdeaBlade.Linq.ExpressionVisitor.VisitExpressionCore(Expression e)
   at IdeaBlade.Linq.TransformExpressionVisitor.VisitExpressionCore(Expression expr)
   at IdeaBlade.Linq.LocalizingExpressionVisitor.VisitExpressionCore(Expression expr)
   at IdeaBlade.Linq.ExpressionVisitor.VisitExpression(Expression expr)
   at IdeaBlade.Linq.ExpressionVisitor.<VisitExpressions>b__0(Expression e)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at IdeaBlade.Linq.ExpressionVisitor.VisitExpressions(IEnumerable`1 expressions)
   at IdeaBlade.Linq.ExpressionVisitor.VisitExpressionCore(Expression e)
   at IdeaBlade.Linq.TransformExpressionVisitor.VisitExpressionCore(Expression expr)
   at IdeaBlade.Linq.LocalizingExpressionVisitor.VisitExpressionCore(Expression expr)
   at IdeaBlade.Linq.ExpressionVisitor.VisitExpression(Expression expr)
   at IdeaBlade.Linq.ExpressionVisitor.Visit(Expression expr)
   at IdeaBlade.Linq.LocalizingExpressionVisitor.Visit(Expression expr)
   at IdeaBlade.EntityModel.ServerEntityQuery..ctor(EntityQuery query)
   at IdeaBlade.EntityModel.EntityQuery`1.GetServerQuery()
   at IdeaBlade.EntityModel.EntityQueryFinder.get_ServerQuery()
   at IdeaBlade.EntityModel.EntityQueryFinder.Execute()
   at IdeaBlade.EntityModel.EntityManager.ExecuteQueryCore(IEntityQuery query, Boolean isAsync)
   at IdeaBlade.EntityModel.EntityManager.<ExecuteQueryAsyncCore>b__4c[T](EntityQueryOperation`1 op)
   at IdeaBlade.EntityModel.AsyncProcessor`1.Execute()
   at IdeaBlade.EntityModel.EntityManager.ExecuteQueryAsyncCore[T](AsyncProcessor`1 processor)
   at IdeaBlade.EntityModel.EntityManager.ExecuteQueryAsync[T](IEntityQuery`1 query, Action`1 userCallback, Object userState)
   at QuestMetrics.Manager.DataModel.Repositories.PermissionRepository.GetUserProfilesWithPermissions(CustomerAccount custacct, Action`1 callback, Expression`1 filter)}




Replies:
Posted By: jsobell
Date Posted: 10-May-2010 at 7:05am
Ping!


Posted By: ting
Date Posted: 10-May-2010 at 5:10pm
I believe this has to do with a Silverlight assembly trust issue.  In order to get the original query syntax to work, the assembly containing the query must grant trust to System.Core.  We've modified the templates for DevForce 2010 to do this automatically, but if you didn't start from a DevForce 2010 template or you've created a new assembly, you will need to add this assembly level attribute to the AsssemblyInfo.cs file:
 
[assembly: InternalsVisibleTo("System.Core, PublicKey=00240000048000009400000006020000002400005253413100040000010001008d56c76f9e8649383049f383c44be0ec204181822a6c31cf5eb7ef486944d032188ea1d3920763712ccb12d75fb77e9811149e6148e5d32fbaab37611c1878ddc19e20ef135d0cb2cff2bfec3d115810c3d9069638fe4be215dbf795861920e5ab6f7db2e2ceef136ac23d5dd2bf031700aec232f6c6b1c785b4305c123b37ab")]
 
Let us know if that works!
 


Posted By: jsobell
Date Posted: 10-May-2010 at 6:16pm
That would make sense. This was in a project converted from WCF RIA.
I'll try it later today and let you know.

Thanks,
 Jason


Posted By: jsobell
Date Posted: 13-May-2010 at 7:27am
Works perfectly, thanks!

Cheers,
 Jason


Posted By: ting
Date Posted: 14-May-2010 at 7:28pm
Sweet!  Thanks for letting us know.



Print Page | Close Window