2011-12-09 10 views
0

CRM 2011のドメイン名と一致する電子メールアドレスを持つ連絡先を持つアカウントのセットを返す最も簡単な方法を探しています。私は早期バインディングエンティティ。私はLinqクエリが最も簡単で、最速ではあるが、どこから始めるべきかわからないと考えている。ありがとう。CRM 2011 - 電子メールアドレスドメインによるアカウントの迅速な検索

var query = (
    from c in ctx.contacts 
    where c.emailaddress1.Substring(c.emailaddress1.IndexOf('@')) == "@domain.com" 
    && c.statuscode == 0 
    select c); 

これは、あなたがすでに事前バインディングクラスを作成し、データコンテキストを設定していると想定されています

答えて

0

@jacobappleton startを使用すると、「条件が無効です」というエラーが表示されました。エンティティメンバーが無効なプロパティまたはメソッドを呼び出しています。私は完全に理解していない

問題は、この行を次のとおりです。

where c.EMailAddress1.Substring(c.EMailAddress1.IndexOf('@')) == email.Substring(email.IndexOf('@') 

精度が低い一方で、私の代わりに、次のためにあることを入れ替えました。クエリの前にドメインを定義する。

where c.EMailAddress1.Contains(domain) 

最終結果:

public Account GetAccount(string email) 
{ 
    var context = new ServiceContext(_service); 
    var domain = email.Substring(email.IndexOf('@')); 
    var contacts = from c in context.ContactSet 
        where c.EMailAddress1.Contains(domain) 
        where c.StateCode == ContactState.Active 
        where c.ParentCustomerId != null 
        select c; 

    return RetrieveEntity(Account.EntityLogicalName, contacts.First<Contact>().ParentCustomerId.Id, new ColumnSet(true)).ToEntity<Account>(); 
} 

関連、私は返されるレコードの数をチェックしますかcontacts.Any()はサポートされていませんか?

+0

'contacts.Count()'を試してください。返される連絡先の数がわかるはずです。 – jacobappleton

2

あなたはこのようなものが必要でしょう。 http://sandrinodimattia.net/blog/post/Early-binding-tips-and-tricks-for-Dynamics-CRM-2011.aspx

希望に役立ちます:

このリンクは、あなたが実際に上記のLINQのコードを実行する必要がポイントにあなたを得る上での情報のかなりを提供します。

+0

.Substringを使用する代わりに、より簡単で効率的ではないでしょうか.EndsWith? 'どこでc.emailaddress1.EndsWith(" @ domain.com ")'のように? –

+0

効率的ですが、私はそれらがかなり似ていると思います:http://msdn.microsoft.com/en-us/library/system.string.endswith%28v=vs.71%29.aspxしかし、私は認めます'EndsWith'はやや簡単です。 – jacobappleton

関連する問題