Linq to CRM - исключение недопустимой операции - PullRequest
2 голосов
/ 04 августа 2011

Я использую LINQ to CRM от Advanced Developer Extension для MS CRM 4.0.Отлично работает с прямыми запросами.Но у меня есть проблема, когда запрос выглядит так:

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();

выдает InvalidOperationException «Не удается определить имя атрибута»Это нормально, когда условие находится непосредственно в первом запросе:

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

Я не могу найти никакой полезной информации об этом виде ошибки.Это ошибка в Xrm Linq Provider?Заранее благодарю за любую помощь.

1 Ответ

1 голос
/ 09 декабря 2011

Попробуйте загрузить исходный запрос с помощью ToList (), чтобы последний запрос по вашему анонимному типу затем оценивался локально. Я понимаю, что это далеко от идеала, если у вас много аккаунтов, но это докажет смысл. В любом случае, у вас есть решение в последнем утверждении.

Это связано с тем, что первый запрос вообще не выполняется до тех пор, пока вы не вызовете .Dump (), после чего все выражение , включая второй запрос , будет оценено как единое (отложенное выполнение) поставщиком затем ищет атрибут Name.

...