2012-02-01 4 views
1

У меня есть два объекта, которые N: N - связаны друг с другом. С примером я покажу вам, что я имею в виду:CRM 2011 - N: N (многие-ко-многим) Linq Issue

  • У меня есть сессия (ave_Session) и там мы можем поставить «Тренер» (ave_trainer) на каждой сессии
  • Я tryting, чтобы получить список А.Л. «тренеров» для конкретной сессии
  • Они связаны друг с другом в N: N (имя отношений: ave_ave_session_ave_trainer)
  • Я работаю в VS2010 и C# => Я пытаюсь получить данные через LINQ

Я недавно только что начал с LINQ, так что, возможно, вы, ребята, можете помочь мне в этом. Ниже я попытался и я дал мне «AttributeFrom и AttributeTo должно быть либо оба указан или оба опущены Вы не можете пройти только один или другой AttributeFrom:., AttributeTo: ave_trainerid» -ошибка:

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 - это идентификатор сеанса. Thx заранее, если вы можете мне помочь!

+4

Вместо того чтобы использовать '' f.id' и c.id ', попробуйте использовать' f.ave_trainerid' и 'c.ave_sessionid'. –

+0

Комментарий Питера является ответом (.id не является допустимым сокращением для поля Guid в запросах LINQ). см. этот аналогичный вопрос/ответ: 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();