Linq to Crm(2011)按用户名搜索systemuser时遇到的问题
我有一个win应用程序,它使用linq to crm通过用户名查询系统用户 在Crm 2011(IFD)中。下面的代码片段显示了我正在尝试的内容 完成。该方法执行时没有错误,但未找到任何记录。 用户名在CRM中显示为“域\测试用户”Linq to Crm(2011)按用户名搜索systemuser时遇到的问题,linq,dynamics-crm-2011,dynamics-crm,Linq,Dynamics Crm 2011,Dynamics Crm,我有一个win应用程序,它使用linq to crm通过用户名查询系统用户 在Crm 2011(IFD)中。下面的代码片段显示了我正在尝试的内容 完成。该方法执行时没有错误,但未找到任何记录。 用户名在CRM中显示为“域\测试用户” publicstaticsystemuser LookUpSystemUser() { var username=“域\\testuser”); var list=(来自Context.CreateQuery()中的c) 其中c.DomainName.Equals(
publicstaticsystemuser LookUpSystemUser()
{
var username=“域\\testuser”);
var list=(来自Context.CreateQuery()中的c)
其中c.DomainName.Equals(用户名)
选择c.ToList();
返回列表。FirstOrDefault();
}
这并不是对您问题的回答,在您的特定情况下,这并不重要,因为每个域名只有一个系统用户,但这是一种最佳做法
在LINQ语句上调用ToList()
时,它将返回SQL数据库中与查询匹配的所有实体。然后调用FirstOrDefault()
将返回第一个客户端
当只对其中一个感兴趣时,不要调用
ToList()
,而是调用FirstOrDefault()
。这实际上会将Top 1
添加到select查询中。这将减少在SQL server、CRM Web服务器上消耗的资源,并减少在SQL server、CRM Web服务器和客户端之间传输的数据。这并不是您问题的答案,在您的特定实例中,这真的不重要,因为每个域名只有一个系统用户,但这是一种最佳实践
在LINQ语句上调用ToList()
时,它将返回SQL数据库中与查询匹配的所有实体。然后调用FirstOrDefault()
将返回第一个客户端
当只对其中一个感兴趣时,不要调用
ToList()
,而是调用FirstOrDefault()
。这实际上会将Top 1
添加到select查询中。这将减少SQL server、CRM Web服务器上消耗的资源,以及SQL server、CRM Web服务器和客户端之间传输的数据。重新创建应用程序似乎可以解决此问题。仍然没有代码差异,因此仍然不确定发生了什么。重新创建应用程序似乎可以解决问题。仍然没有代码差异,因此仍然不确定发生了什么。尝试运行此方法(或其规范等效方法),看看是否有任何结果。如果是这样,则可以在Select语句中收紧条件
publicstaticsystemuser LookUpSystemUser()
{
返回Context.CreateQuery()
.Select(元素=>true)
.FirstOrDefault();
}
请记住,默认值(SystemUser)将生成null
不在计算机上,没有测试过。试着运行这个方法(或它的标准等效方法),看看你是否得到了什么。如果是这样,则可以在Select语句中收紧条件
publicstaticsystemuser LookUpSystemUser()
{
返回Context.CreateQuery()
.Select(元素=>true)
.FirstOrDefault();
}
请记住,默认值(SystemUser)将生成null
不在计算机上,没有测试过。如果删除
,在哪里
会得到任何结果?另一个选择是在CRM中找到您想找到的用户,并根据其Guid检索该用户,并检查其域名,以了解为什么找不到该用户。您的案例正确吗?如果删除,您可以尝试使用c.DomainName.Equals(username,stringcomparison.ignorecase),其中是否有任何结果?另一个选项是在CRM中查找您想要查找的用户,并根据其Guid检索该用户,并检查其域名,以查看未找到该用户的原因。您的案例正确吗?您可以尝试c.DomainName.Equals(username,stringcomparison.ignorecase)您是否更改了数据库排序规则?不同的排序规则可能会导致区分大小写的更改,从而得到不同的结果。您是否碰巧更改了数据库排序规则?不同的排序规则可能会导致区分大小写的更改,从而得到不同的结果。
public static SystemUser LookUpSystemUser()
{
var username= "domain\\testuser");
var list = (from c in Context.CreateQuery<SystemUser>()
where c.DomainName.Equals(username)
select c).ToList();
return list.FirstOrDefault();
}