2

我正在使用来自 MS CRM 4.0 的 Advanced Developer Extension 的 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 提供程序中的错误吗?提前感谢您的帮助。

4

1 回答 1

1

尝试使用 ToList() 预先加载初始查询,以便随后在本地评估匿名类型的查询。如果您有很多帐户,我知道这远非理想,但这将证明这一点。无论如何,您在最后一条语句中基本上都有解决方案。

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

于 2011-12-08T23:08:52.680 回答