CRM 2011 - N: N (многие ко многим) Linq Issue - PullRequest
2 голосов
/ 01 февраля 2012

У меня есть две сущности, которые N: N - связаны друг с другом. На примере я покажу вам, что я имею в виду:

  • У меня есть сессия (ave_Session), и там мы можем поставить «Тренеры» (ave_trainer) на каждую сессию
  • Я пытаюсь получить список всех «Тренеры» для конкретной сессии
  • Они связаны друг с другом в 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 - это идентификатор сессии. Спасибо заранее, если вы можете мне помочь!

Ответы [ 2 ]

1 голос
/ 05 февраля 2012

Это выглядит немного задом наперед, как вы сейчас это написали (при условии, что я правильно его разобрал).

Что вы обычно делаете, это сначала ставите «начальную вещь», а затем проходите черезкартирование, чтобы добраться до тех, которые вы хотите.У меня нет опыта работы с 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();
1 голос
/ 01 февраля 2012

со страницы 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);
}
...