Linq to CRM - 无效的操作异常

时间:2011-08-04 13:40:48

标签: linq dynamics-crm-4 invalidoperationexception

我正在使用来自Advanced Developer Extension for MS CRM 4.0的LINQ to CRM。它适用于直接查询。但是当查询看起来像这样时我遇到了问题:

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 个答案:

答案 0 :(得分:1)

尝试使用ToList()初始加载初始查询,以便在本地评估后者对匿名类型的查询。如果你有很多账户,我觉得这远非理想,但它证明了这一点。在最后一个声明中,你基本上都有一个解决方案。

这是因为在您调用.Dump()之前根本不执行第一个查询,此时整个表达式包括第二个查询被提供者评估为一个(延迟执行)然后查找Name的属性。