Применить левое внутреннее соединение в EF MVC - PullRequest
0 голосов
/ 20 сентября 2019


У меня есть следующий синтаксис SQL:

select      a.year, a.Month, 
            a.DocumentNumber, b.BoxNumber, 
            c.LocationShortName, d.RackShortName
from        MasterAP a 
            left join RecordManagementAP b on a.MasterAPID = b.MasterAPID
            left join MasterLocation c on b.LocationID = c.LocationID
            left join MasterRack d on b.RackID = d.RackID
where       a.Month = '2'

Как я могу применить этот синтаксис к синтаксису EF в MVC?Мой текущий синтаксис в EF:

var recordManagementAPs = db.RecordManagementAPs.Include(r => r.MasterAP).Include(r => r.MasterLocation).Include(r => r.MasterRack);
return View(recordManagementAPs.ToList());

Любая идея?
Действительно оценили.
Спасибо.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Проекция.

Объявите модель представления для данных для вашего представления.(вместо передачи сущностей.)

[Serializable]
public class RecordDetailViewModel
{
    public int MasterAPId { get; set; }
    public string Year { get; set; }
    public string Month { get; set; }
    public string DocumentNumber { get; set; }
    public string BoxNumber { get; set; }
    public string LocationShortName { get; set; }
    public string RackShortName { get; set; }
}

Спроецируйте запрос вашей сущности в модель представления и верните:

var viewModels = db.MasterAPs
    .Where(x => x.Month == month) // "2"
    .Select(x => new RecordDetailViewModel
    {
        MasterAPId = x.MasterAPId,
        Year = x.Year,
        Month = x.Month,
        DocumentNumber = x.DocumentNumber,
        BoxNumber = x.RecordManagementAP.BoxNumber,
        LocationShortName = x.MasterLocation.LocationShortName,
        RackShortName = x.MasterRack.RackShortName
     }).ToList();

Предполагая, что ваши связи сущностей были сопоставлены.

Ключевое слово Include используется, когда вы возвращаете целые сущности и хотите предварительно извлечь связанные сущности (включить их), а не лениво загружать их, если к ним обращаются.Как правило, извлекать сущности (и связанные сущности) следует только тогда, когда вы хотите сделать что-то вроде обновления, в котором вы либо принимаете модель представления или набор полей для обновления из представления, загружаете сущность (и) и применяете обновления перед сохранениемюридические лица.Не передавайте сущности представлениям.Это предоставляет больше информации о вашем домене, чем вам нужно, требует больше памяти и может привести к ошибкам или ошибкам производительности при сериализации отношений.Получение сущностей из представлений хуже, так как это может сделать вашу систему уязвимой для неожиданных изменений, потенциальных ошибок привязки и перезаписи данных устаревшими изменениями.

0 голосов
/ 20 сентября 2019

Вы можете написать свой запрос следующими способами:

var query = (from a in Context.MasterAP
            join b in Context.RecordManagementAP on new { a.MasterAPID } equals new { b.MasterAPID }
            into b1
            from b in b1.DefaultIfEmpty()
            join c in Context.MasterLocation on new { b.LocationID } equals new { c.LocationID }
            into c1
            from c in c1.DefaultIfEmpty()
            join d in Context.MasterRack on new { b.RackID } equals new { d.RackID }
            into d1
            from d in d1.DefaultIfEmpty()
            where a.Month == 2
            select new //Write YourModelName Here After new kwyword
            {
                Year = a.Year,
                Month = a.Month,
                DocumentNumber = a.DocumentNumber,
                BoxNumber = b.BoxNumber,
                LocationShortName = c.LocationShortName, 
                RackShortName = d.RackShortName
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...