2013-10-09 6 views
0

Я пытаюсь получить все записи от объекта, которые не присоединяются к другому объекту.
Это то, что я пытаюсь сделать в SQL:Dynamics CRM 2011 Linq Left Outer Присоединиться

SELECT * from table1 
LEFT join table2 
ON table1.code = table2.code 
WHERE table2.code IS NULL 

Это приводит всех TABLE1 строк, которые не присоединились к table2.

У меня есть работа с Linq при подключении к одному полю, но у меня есть записи контактов, чтобы присоединиться к первому, dob и числу.

У меня есть «промежуточная» организация, которая импортируется; рабочий процесс обрабатывает промежуточные записи и создает контакты, если они новы.
Промежуточный объект является в значительной степени копией реального объекта.

var queryable = from staging in linq.mdo_staging_contactSet 
       join contact in linq.ContactSet 
       on staging.mdo_code equals contact.mdo_code 
       into contactGroup 
       from contact in contactGroup.DefaultIfEmpty() 
       // all staging records are selected, even if I put a where clause here 
       select new Contact 
       { 
        // import sequence number is set to null if the staging contact joined to the default contact, which has in id of null 
        ImportSequenceNumber = (contactContactId == null) ? new int?(subImportNo) : null, 
        /* other fields get populated */ 
       }; 
return queryable // This is all staging Contacts, the below expressions product only the new Contacts 
    .AsEnumerable() // Cannot use the below query on IQuerable 
    .Where(contact => contact.ImportSequenceNumber != null); // ImportSequenceNumber is null for existing Contacts, and not null for new Contacts 


Могу ли я сделать то же самое, используя синтаксис метода?
Могу ли я сделать это и присоединиться к нескольким полям?
Альтернативы, которые я обнаружил, были хуже и задействованы с помощью newRecords.Except (existingRecords), но с IEnumerables; Есть ли способ лучше?

+1

Я просто изучал это сам. [Этот ответ] (http://stackoverflow.com/a/6333207/685760), по-видимому, указывает на то, что с CRM-реализацией LINQ это невозможно. См. Раздел [ограничения] (http://technet.microsoft.com/en-us/library/gg328328.aspx#limitations) связанного MSDN doco, в котором говорится: «Вы не можете выполнять внешние соединения» –

ответ

0

Вы можете сделать то же самое с вызовами методов, но некоторые из них, как правило, усложняют чтение, так как в середине есть некоторые выражения LAMBDA. Here - пример, который показывает, как эти два в основном одинаковы.

Я видел, как другие задавали эти же вопросы, и это сводится к выбору разработчиком. Мне лично нравится подход LINQ, поскольку я также пишу кучу SQL, и я могу читать код легче.

Смежные вопросы