1

Crm 2011(IFD)でユーザー名でシステムユーザーを照会するためにlinq to crmを使用している勝利アプリがあります。私が達成しようとしていることを示す次のコード スニペットがあります。メソッドはエラーなしで実行されますが、レコードが見つかりません。ユーザー名は、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

これは実際にはあなたの質問に対する答えではありません。特定のインスタンスでは、DomainName ごとに SystemUser が 1 つしかないため、実際には問題になりませんが、これはベスト プラクティスです。

LINQ ステートメントを呼び出すとToList()、SQL データベースからクエリに一致するすべてのエンティティが返されます。次に呼び出すFirstOrDefault()と、最初のクライアント側が返されます。

ToList()1 つだけに関心がある場合は、電話する代わりに、電話してFirstOrDefault()ください。これにより、実際Top 1には選択クエリに追加されます。これにより、SQL サーバー、CRM Web サーバーで消費されるリソースが少なくなり、SQL サーバー、CRM Web サーバー、およびクライアント間で転送されるデータが少なくなります。

于 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 に答える