2012-02-01 16 views
1

私は、互いにN:N関連する2つのエンティティを持っています。例で、私は私が何を意味するかを紹介します:CRM 2011 - N:N(多対多)Linq Issue

  • 私はセッション(ave_Session)を持っており、そこに私たちは、私が取得するtrytingてる各セッション
  • の「トレーナー」 (ave_trainer)を置くことができます彼らは Nで互いに関連している
  • 特定のセッションのためにアル 「トレーナー」のリスト:N(関係名:ave_ave_session_ave_trainer)
  • 私はVS2010での作業としてC#=>私が取得しようとしていますLINQによるデータ

私は最近、LINQを使い始めました。だから多分、あなたは私にこのことを助けてくれるでしょう。私が試したと私は私に与えた「AttributeFromとAttributeToが両方指定するか、またはその両方ommitedしなければならないのいずれかをあなたはどちらか一方だけを渡すことはできませんAttributeFrom。。:、AttributeTo:ave_trainerid」次-error:

var formatteurs = (from f in ORGContext.CreateQuery<ave_trainer>() 
        join s in ORGContext.CreateQuery<ave_ave_session_ave_trainer>() on f.Id equals s.ave_trainerid.Value 
        join c in ORGContext.CreateQuery<ave_session>() on s.ave_sessionid.Value equals c.Id 
        where c.Id == item.Id 
        select f).ToList(); 

item.idはセッションのIDです。あなたが私を助けることができる場合は事前にThx!

+4

代わりに 'f.id'と' c.idを使用します'、' f.ave_trainerid'と 'c.ave_sessionid'を試してください。 –

+0

Peterのコメントが答えです(.idはLINQクエリのGuidフィールドの実行可能な短縮形ではありません)。この似たような質問/回答を参照してください:https://stackoverflow.com/questions/23373931/how-to-retieve-crm-guid-using-linq-and-joins –

答えて

1

MSDNページから:

// List the contacts in the Softball team marketing list. 
System.Console.WriteLine("List all contacts in Softball Team:"); 

var members = from c in crm.contacts 
       join mlm in crm.listmembers on c.contactid equals mlm.entityid 
       join ml in crm.lists on mlm.listid equals ml.listid 
       where ml.listname == "Softball Team" 
       select c; 

foreach (var c in members) 
{ 
    System.Console.WriteLine(c.fullname + " " + c.emailaddress1); 
} 
+0

これも私が見つけたものです..上記の参加はしかし、私はそれを行う正しい方法を見つけるのはあまり見えません...私はまず関係からやっていく必要がありますか? – Freeetje

1

それは(私はそれを正しく解析してると仮定して)少し後方あなたはそれが今で書かれている方法です。

あなたが通常やっていることは、あなたの「始めのもの」をまず入れてから、あなたが望むものに到達するためにマッピングを行っていくことです。私はCRM 2011の経験がありませんので、うまくいけば、これをあまりにも邪魔しなかったでしょう。 :)

はまた、私は単一文字の名前のファンではないので、私は長い名前を使用しての自由を取った:)

var formatteurs = (
    // first get the session we're interested in 
    from session in ORGContext.CreateQuery<ave_session>() 
    where session.Id == item.Id 

    // now get the mapping rows that are related to it 
    join mapping in ORGContext.CreateQuery<ave_ave_session_ave_trainer>() 
     on session.Id equals s.ave_sessionid.Value 

    // now get from the mapping rows to the actual trainers 
    join trainer in ORGContext.CreateQuery<ave_trainer>() 
     on mapping.ave_trainerid.Value equals trainer.Id 

    select trainer 
).ToList();