Как получить Присоединение IQueryable с моделью любых типов SQL C # - PullRequest
0 голосов
/ 27 мая 2019

У меня есть эта модель ExpenseReport

public class ExpenseReport
    {
        public Guid Id { get; set; }
        public Guid InternalId { get; set; }
        public Guid AccountId { get; set; }
        public string Alias { get; set; }
        public bool IsDraft { get; set; }
        public int BaseCurrencyId { get; set; }
        public Guid ContactId { get; set; }
        public Contact Contact { get; set; }
        public Guid? JobId { get; set; }
        public Job Job { get; set; }
        public Customer Customer { get; set; }
        public Guid CustomerId { get; set; }
        public DateTime? PublishedOn { get; set; }
        public DateTime? ExpectedPayDate { get; set; }
        public ExpenseReportStatus Status { get; set; }
        public ExpenseReportStatusEnum StatusId { get; set; }
        public string OriginReference { get; set; }
        public decimal AdvanceValue { get; set; }
        public decimal TotalValue { get; set; }
        public string CreatedBy { get; set; }
        public DateTime CreatedOn { get; set; }
        public string UpdatedBy { get; set; }
        public DateTime UpdatedOn { get; set; }
    }

Мне нужно присоединиться, чтобы получить JOB, CUSTOMER, и Contact из другого стола

когда я использую LINQ, чтобы получить эти значения, он возвращает мне null их. Что будет стыком этого возврата

Мой запрос

  public IQueryable<ExpenseReport> ExpenseReports => (from exReport in _dataContext.ExpenseReport
                                                            join job in _dataContext.Job on exReport.JobId equals job.Id
                                                            join contact in _dataContext.Contact on exReport.ContactId equals contact.Id
                                                            join customer in _dataContext.Customer on exReport.CustomerId equals customer.Id
                                                            select exReport );

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Моим решением было создать DTO, который возвращает только то, что мне нужно, и использовать .Include

var ownerData = _repository.ExpenseReports
                .Where(w => w.AccountId.Equals(_identityService.Identity.CurrentAccount.Id))
                .Include(x => x.Customer)
                .Include(x => x.Job)
                .Select(x => new MyExpenseReportDTO
                {
                   Id = x.Id,
                   InternalId = x.InternalId,
                   Alias = x.Alias,
                   Job = x.Job.Name,
                   CreatedOn = x.CreatedOn,
                   ExpectedPayDate = x.ExpectedPayDate,
                   Customer = x.Customer.Name,
                   CostCenterName = x.Job.CostCenter.Name,
                   BaseCurrencyId = x.BaseCurrencyId,
                   Status = x.Status.Name,
                   TotalValue = x.TotalValue
                });
0 голосов
/ 27 мая 2019

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

var results = from report in _context.ExpenseReport
              select new { Report = report, JobName = report.Job.Name };
foreach(var x in results)
{
    Console.WriteLine($"Got job {x.JobName} with { x.Report }");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...