Print Page | Close Window

Joins...

Printed From: IdeaBlade
Category: DevForce
Forum Name: DevForce 2009
Forum Discription: For .NET 3.5
URL: http://www.ideablade.com/forum/forum_posts.asp?TID=1684
Printed Date: 28-Mar-2024 at 5:51am


Topic: Joins...
Posted By: mikewishart
Subject: Joins...
Date Posted: 12-Mar-2010 at 3:21pm
I'm a bit baffled on this one.  I wrote it to simplify it and use NorthwindIB.  Pretend we just didn't have a FK between Orders and OrderDetails.  (I've tried a couple different join methods and all result with the same problem).

If I do the following with Silverlight:

    public MainPage()
    {
      InitializeComponent();

      DomainModelEntityManager mgr = new DomainModelEntityManager();

      int i = 1;
      var q1 = from o in mgr.Orders
               join d in mgr.OrderDetails
                 on new { o.OrderID } equals new { d.OrderID }
               where (d.Quantity > i)
               select o;

      mgr.ExecuteQueryAsync(q1, callback, null);
    }

    public void callback(EntityFetchedEventArgs<Order> args)
    {
      if (args.Error != null)
        MessageBox.Show(args.Error.Message);
      else if (args.Result != null)
        MessageBox.Show(args.Result.ToString());
    }

The args.Error.Message says: "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<DomainModel.Order,DomainModel.OrderDetail>,System.Boolean>>.Create(System.Linq.Expressions.Expression, System.String, Boolean, System.Collections.ObjectModel.ReadOnlyCollection`1<System.Linq.Expressions.ParameterExpression>)' failed."

However, the same code in a console app runs just fine.  The only difference is the WCF and of course the actual library code.  Any idea where the problem is?

Also... If I don't use a variable, it runs fine:  d.Quantity > 1

Thanks.




Replies:
Posted By: ting
Date Posted: 16-Mar-2010 at 5:45pm
Hi Mike,
 
Thanks for mocking up a simple example that runs against NorthwindIB!  We will run some tests on it over here.
 
In the meantine, have you tried the join syntax without using 'new'?  I think it can be written as:
join d in mgr.OrderDetails on o.OrderID equals d.OrderID ...
 


Posted By: mikewishart
Date Posted: 18-Mar-2010 at 9:36am
Yes, I tried quite a few join methods.  Anything with a variable fails in Silverlight but works fine in the .net library

      var q1 = from o in mgr.Orders
               join d in mgr.OrderDetails
                 on  o.OrderID equals d.OrderID
               where (d.Quantity > i)
               select o;

      var q1 = mgr.Orders
                  .Join(mgr.OrderDetails,
                        o => o.OrderID,
                        d => d.OrderID,
                        (o, d) => new { o = o, d = d })
                  .Where(r => r.d.Quantity > i)
                  .Select(r => r.o);



Posted By: ting
Date Posted: 18-Mar-2010 at 3:10pm
Yes, we confirmed this issue as well.  There is a problem with the closure in Silverlight (as you noted, it works when you use a constant instead of i).
 
We've added this to the bug base and will get it fixed.  Thanks for pointing this out!
 


Posted By: ting
Date Posted: 06-Apr-2010 at 3:55pm
In order to get this to work, the assembly containing this code must be grant trust to System.Core.  We've modified the templates for DevForce 2010 to do this automatically.
 
For DevForce 2009 and for any new client assemblies you may create (in either product), you will need to add the following assembly level attribute (to AssemblyInfo.cs):
 
[assembly: InternalsVisibleTo("System.Core, PublicKey=00240000048000009400000006020000002400005253413100040000010001008d56c76f9e8649383049f383c44be0ec204181822a6c31cf5eb7ef486944d032188ea1d3920763712ccb12d75fb77e9811149e6148e5d32fbaab37611c1878ddc19e20ef135d0cb2cff2bfec3d115810c3d9069638fe4be215dbf795861920e5ab6f7db2e2ceef136ac23d5dd2bf031700aec232f6c6b1c785b4305c123b37ab")]
 



Print Page | Close Window