1

我有一个 win 应用程序,它使用 linq to crm 在 Crm 2011(IFD)中按用户名查询系统用户。我有以下代码片段,它显示了我要完成的工作。该方法执行没有错误,但是没有找到记录。用户名在 CRM 中显示为“domain\testuser”。

 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();
    }
4

3 回答 3

3

重新创建应用程序似乎可以解决问题。仍然没有代码差异,所以仍然不确定发生了什么。

于 2013-03-07T06:03:21.993 回答
1

这确实不是您问题的答案,并且在您的特定情况下,由于每个域名只有一个 SystemUser,这实际上并不重要,但这是最佳实践。

调用ToList()LINQ 语句时,它将返回 SQL 数据库中与查询匹配的所有实体。然后调用FirstOrDefault()将返回第一个客户端。

而不是ToList()只对一个感兴趣时调用,调用FirstOrDefault(). 这实际上会导致Top 1添加到选择查询中。这将减少在 SQL 服务器、CRM Webserver 上消耗的资源以及在 SQL 服务器、CRM Webserver 和客户端之间传输的数据。

于 2013-03-07T05:04:35.993 回答
0

尝试运行这个方法(或它的规范等效方法),看看你是否得到任何东西。如果是这样,您可以收紧Select语句中的条件。

public static SystemUser LookUpSystemUser()
{
  return Context.CreateQuery<SystemUser>()
    .Select(element => true)
    .FirstOrDefault();
}

请记住default(SystemUser)将产生null

不在电脑上,没测试过。

于 2013-03-07T07:27:16.240 回答