我正在使用来自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中的错误吗? 在此先感谢您的帮助。
答案 0 :(得分:1)
尝试使用ToList()初始加载初始查询,以便在本地评估后者对匿名类型的查询。如果你有很多账户,我觉得这远非理想,但它证明了这一点。在最后一个声明中,你基本上都有一个解决方案。
这是因为在您调用.Dump()之前根本不执行第一个查询,此时整个表达式包括第二个查询被提供者评估为一个(延迟执行)然后查找Name的属性。