Я работаю с сущностями LINQ и не нашел для этого хорошего решения. У меня есть большой запрос, который дает мне записи в соответствии с этим, и вот запрос, и этот запрос не дает мне ожидаемого результата при соединении с таблицей SMSLog, потому что некоторые из коротких ссылок являются нулевыми на стороне обратного вызова, поэтому я должен сделать его внешним но проще ли изменить весь запрос или в любом случае добиться внешнего соединения в данной конкретной ситуации
var callback = Context.Callbacks.Where(_ => _.Status == 1)
.Join(Context.Users,
c => c.UserId,
u => u.Id,
(c, u) => new
{
User = new
{
u.SalesRepId,
UserName = u.FirstName + " " + u.LastName,
u.Email,
u.PhoneNumber,
},
Callback = new
{
c.TaskId,
c.DateCallback,
c.DeviceId,
c.DateEnd,
c.callbackId,
c.Point,
c.DeviceType,
c.Code,
c.ShortLinkCode
}
})
.AsEnumerable()
.Join(Context.SMSLog,
c => c.Callback.ShortLinkCode,
sms => sms.ShortLinkCode,
(c, sms) => new
{
c.Callback,
c.User,
SMS = new
{
sms.TelNo
}
})
.AsEnumerable()
.Concat(query)
.Join(Context.Items,
c => c.Callback.TaskId,
i => i.Id,
(c, i) => new
{
c.Callback,
c.User,
c.SMS,
Item = new
{
i.en_US,
i.ru_RU,
i.tr_TR,
},
})
.AsEnumerable();
Я пробовал этот запрос для их объединения, но у меня это не сработало
var query = (from cb in Context.Callbacks
join usr in Context.Users on cb.UserId equals user.Id
join sms in Context.SMSLog on cb.ShortLinkCode equals sms.ShortLinkCode into gj
where cb.Status == 1
from subcallback in gj.DefaultIfEmpty()
select new
{
Callback = new
{
cb.TaskId,
cb.DateCallback,
cb.DeviceId,
cb.DateEnd,
cb.callbackId,
cb.Point,
cb.DeviceType,
cb.Code,
cb.ShortLinkCode
},
User = new
{
usr.SalesRepId,
UserName = usr.FirstName + " " + usr.LastName,
usr.Email,
usr.PhoneNumber,
},
SMS = new
{
subcallback.TelNo
}
}).AsEnumerable();