Microsoft.Xrm.Sdk,Version = 7.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35
var ctx = new ServiceContext(...);
var result1 = (from f in ctx.CreateQuery<aEntity>()
where f.field1 == "x"
select new { f.Id, f.field2 }).ToList();
var result2 = (from f in ctx.CreateQuery<aEntity>()
where f.field1 == "x"
select f.field1).First();
result2返回null!将f.field1添加到第一个查询中的select子句后,result2返回&#34; x&#34;。看起来像是在第二次调用的上下文中创建并使用内部列集。查看两个调用的SQL Server跟踪,我们可以看到基于C#代码的预期select-from查询。返回的第二个结果不是预期的。有人可以解释这种行为吗?
答案 0 :(得分:1)
就我而言,它看起来像一个缓存功能,而且它在CRM方面,因为正如你提到的SQL查询是正确的。当我尝试对同一个实体记录进行两次连续查询但选择了两个不同的字段时,我的应用程序中遇到了同样的问题,第二个请求总是返回NULL
。
以下是我在使用ServiceContext
:
select
语句)(即使我是否需要)
现在我尽量少用ServiceContext
代替QueryBase
表达式(即使我喜欢使用LINQ)。
答案 1 :(得分:0)
请记住,LINQ CRM驱动程序实现只是SQL的一个子集。
你能尝试这样的事吗?
var result1 = (from f in ctx.CreateQuery<aEntity>()
where f.field1 == "x"
select new CustomClass {
Id = f.aEntityId,
Field2 = f.field2
}).ToList();
如果需要,您可以拥有复杂的查询,但您需要知道可以做什么以及无法做什么。
驱动程序并不总是返回Id属性,但实体的主键是,通常是实体逻辑名+“Id”。