需要从IEnumerable <item>获取id

时间:2016-12-06 12:11:15

标签: c# asp.net asp.net-mvc database asp.net-core

所以我试图创建一个小网站来帮助我的家人做生意。

我有两个模特,乔布斯和戴斯。

public class Job
{
    public int JobId { get; set; }
    public int LotNum { get; set; }
    public string Street { get; set; }
    public string Suburb { get; set; }
    public double PerHour { get; set; }
    public string Description { get; set; }

}

public class Day
{
    public int JobId { get; set; }
    public int DayId { get; set; }
    public DateTime Date { get; set; }
    public double Hours { get; set; }
    public string Details { get; set; }
    public int Invoice { get; set; }
}

我需要发票,发票将编号。这些日子有发票号码,所以很难选择所需的日子。 它看起来像这样。

    Date LotNum Street      Suburb     Hours
    1/1/01 1 John Street Hurstville x hours
    1/1/01 1 John Street Hurstville x hours
    1/1/01 1 John Street Hurstville x hours
    1/1/01 1 John Street Hurstville x hours

我可以使用以下内容获取具有特定发票编号的日期:

vm.Days = _dayRepo.GetAll().Where(d => d.Invoice == id);

通过这样做,我有当天的日期和时间,但现在我需要获取工作信息。 Day和Job都有JobId,所以我可以链接它们,但我不知道如何。

这是我到目前为止所做的:

public IActionResult Invoice(int id)
    {
        CreateInvoiceViewModel vm = new CreateInvoiceViewModel();
        vm.Days = _dayRepo.GetAll().Where(d => d.Invoice == id);
        //vm.JobId = 
        vm.Jobs = _jobRepo.GetAll();

        return View(vm);
    }

我的观点如下:

    @model CreateInvoiceViewModel


<table>

    @foreach (var item in Model.)

    {
            <tr>
                <td>@item.Date.Date.ToString("dd/MM/yy")</td>
                <td>@item.Hours</td>


          </tr>
     }

</table>

我不知道该为foreach投入什么。

提前致谢!

3 个答案:

答案 0 :(得分:3)

你只需要一个连接查询。定义您的ViewModel,如:

public class InvoiceViewModel
{
    public DateTime Date { get; set; }

    public int LotNum { get; set; }

    public string Street { get; set; }

    public string Suburb { get; set; }

    public double Hours { get; set; }
 }

创建连接查询并将其转换为ViewModel:

public IActionResult Invoice(int id)
{
    var query = from d in _dayRepo.GetAll()
                            join job in _jobRepo.GetAll() on d.JobId equals job.JobId
                            select new { Date=d.Date, LotNum= job.job , Street =job.Street , Suburb =job.Suburb , Hours =d.Hours };

    IEnumerable<InvoiceViewModel> viewModel = query.Select(c => new  InvoiceViewModel() 
   { 
     Date=query.Date,
     LotNum=query.LotNum,
     Street=query.Street,
     Suburb=query.Suburb,
     Hours=query.Hours 
   });

     return View(viewModel);
}

答案 1 :(得分:1)

这应该导致IEnumerable与您的ID

var ids = _dayRepo.GetAll().Where(d => d.Invoice == id).Select(x => x.JobId);

如果您希望将.ToList()作为列表,也可以添加Broadcast

答案 2 :(得分:0)

这或多或少是我如何设置它,或者至少是如何设置它。

(我正在使用EntityFrameworkCore,是的,我知道你现在正在使用repos)

public class Job
{
    public int Id { get; set; }
    public int LotNum { get; set; }
    public string Street { get; set; }
    public string Suburb { get; set; }
    public double PerHour { get; set; }
    public string Description { get; set; }

    // Navigation Helper
    public virtual ICollection<InvoiceJobRelationship> Invoices { get; set; }
}

public class Day
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    public double Hours { get; set; }
    public string Details { get; set; }

    // Navigation Helper
    public virtual ICollection<InvoiceDayRelationship> Invoices { get; set; }
}

public class Invoice
{
    public int Id { get; set; }

    // Navigation Helpers
    public virtual ICollection<InvoiceJobRelationship> Jobs { get; set; }
    public virtual ICollection<InvoiceDayRelationship> Days { get; set; }
}
public class InvoiceDayRelationship
{
    public int InvoiceId { get; set; }
    // Navigation Helper
    [ForeignKey("InvoiceId")]
    public Invoice Invoice { get; set; }
    public int DayId { get; set; }
    // Navigation Helper
    [ForeignKey("DayId")]
    public Day Day { get; set; }
}
public class InvoiceJobRelationship
{
    public int InvoiceId { get; set; }
    // Navigation Helper
    [ForeignKey("InvoiceId")]
    public Invoice Invoice { get; set; }
    public int JobId { get; set; }
    // Navigation Helper
    [ForeignKey("JobId")]
    public Job Job { get; set; }
}

然后在你的上下文中

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<InvoiceDayRelationship>()
            .HasKey(id => new { id.DayId, id.InvoiceId });
        builder.Entity<InvoiceJobRelationship>()
            .HasKey(ij => new { ij.JobId, ij.InvoiceId });
    }

    public DbSet<Invoice> Invoices { get; set; }
    public DbSet<Day> Days { get; set; }
    public DbSet<Job> Jobs { get; set; }
    public DbSet<InvoiceDayRelationship> InvoiceDays { get; set; }
    public DbSet<InvoiceJobRelationship> InvoiceJobs { get; set; }

然后你几乎可以打电话给任何你想要的东西。

(示例查询)

    (from x in context.Invoices where x.Id == id select x).Include(inv => inv.Days).Include(inv => inv.Jobs);