2013-03-23 3 views
0

Я пытаюсь взять TSQL ниже и преобразовать его в LINQ. Я, очевидно, не очень хорошо разбираюсь в этом и не знаю, как это сделать в Linq. Моя путаница немного выходит за рамки простого выражения. В моих основных применениях мой результирующий набор - это класс, который, конечно же, представляет собой строку таблицы ... но для объединения не было бы этого отношения один к одному, поэтому мне нужно создать настраиваемый набор результатов?Переключатели передач от TSQL до LINQ

TSQL:

SELECT 
    SimEA.*, 
    SimE.* 
FROM 
    dbo.SSimEmailsAdressees SimEA 

JOIN dbo.SSimEmails SimE ON 
SimEA.EmailID = SimE.EmailMsgID 

WHERE 
SimEA.UserId = var 

Ближайший я пришел:

this.GetAll<SSimEmails>() 
    .Where(e => e.SSimEmailsAdressees.Any(p => p.UserId.ToString() == usrID)); 

Что, конечно, возвращает объект, который является подражанием из одной таблицы выполняется запрос. Так что мне нужна помощь в добавлении соединения, и я предполагаю, что мне нужно будет создать возвращаемый объект примерно так?

this.GetAll<MyJoinResultsObject>...... 
+0

Является ли эта сущность рамки? –

ответ

0
var result = from ea in SimEA 
     join e in SimE 
     on ea.EmailID equals e.EmailMsgID 
    where ea.UserId = userId 
     select new { properties you want here or new object based on properties} 
+0

Любая причина, по которой человек использовал бы LINQ над Iqueryable лямбдой? Например, я думал что-то вроде: this.GetAll (). Присоединиться (....) – GPGVM

1

Я думаю, что вы должны написать что-то вроде:

var q = 
     from SimEA in SSimEmailsAdressees 
     where SimEA.UserId = usrID 
     join SimE in SSimEmails on SimEA.EmailID equals SimE.EmailMsgID 
       into joinSimE 
     from SimE in joinSimE.DefaultIfEmpty() 
     select new { EmailID = SimEA.EMailID, UserId = SimEA.UserId, OtherField = SimE.OtherField }; 
+0

Почему «новый» в статье «равен»? Не может обойтись без него, например. 'SimEA.EmailID равно SimE.EmailMsgID'? – alzaimar

+0

@alzaimar Да, вы правы, это полезно, когда у вас есть несколько ключей для подключения. Я починил это. –