krlm
krlm

Reputation: 837

Linq to CRM - Invalid operation exception

I'm using a LINQ to CRM from Advanced Developer Extension for MS CRM 4.0. It works fine with direct queries. But I've got a problem when query looks like this:

var connectionString = @"User ID=u; Password=p; Authentication Type=AD; Server=http://crm:5555/UO";
var connection = CrmConnection.Parse(connectionString);
var dataContext = new CrmDataContext(connection);

var data = from u in dataContext.Accounts
           select new 
           {  
              Id = u.AccountID,
              Name = u.AccountName,
           };

var r = from n in data
        where n.Name.StartsWith("test")
        select new 
        { 
           Id = n.Id 
        };

r.Dump();

it throws an InvalidOperationException "Cannot determine the attribute name." It's fine when a condition is directly in first query:

var data = from n in dataContext.Accounts
           where n.AccountName.StartsWith("test")
           select new 
           {  
              Id = n.AccountID,
              Name = n.AccountName,
           };

I cannot find any useful information about this kind of error. Is it a bug in Xrm Linq Provider? Thanks in advance for any help.

Upvotes: 2

Views: 648

Answers (1)

Darren Lewis
Darren Lewis

Reputation: 8488

Try eager loading the initial query with a ToList() so the latter query over your anonymous type is then evaluated locally. I get this is far from ideal if you have a lot of accounts but it'll prove the point. You essentially have a solution anyway in the last statement.

This is because the first query isn't executed at all until you call .Dump() at which point the entire expression including the second query is evaluated as one (deferred execution) by the provider which then looks for an attribute of Name.

Upvotes: 1

Related Questions