实体框架+模型+ 2表+列表

时间:2014-02-11 23:32:29

标签: c# asp.net-mvc linq entity-framework

我遇到了LINQ结果的问题

  • 我的数据库结构

enter image description here

[外键] - > [主键(PRIMARY KEY TABLE)]

[companyFK] - > [companyID(companyTable)]

[billFK] - > [billerID(billerTable)]

[attFK] - > [attentedID(attentedTable)]

enter image description here

*这是我的发票模型(此模型随ADO.NET实体框架自动生成)

namespace pcis
{
using System;
using System.Collections.Generic;

public partial class invoiceTable
{
    public int invoiceID { get; set; }
    public Nullable<int> companyFK { get; set; }
    public string currency { get; set; }
    public Nullable<decimal> amt { get; set; }
    public Nullable<System.DateTime> startDate { get; set; }
    public Nullable<System.DateTime> endDate { get; set; }
    public Nullable<int> billFK { get; set; }
    public Nullable<int> attFK { get; set; }
    public string status { get; set; }

    public virtual attentedTable attentedTable { get; set; }
    public virtual billerTable billerTable { get; set; }
    public virtual companyTable companyTable { get; set; }
}
}
  • 这是我的发票表的数据访问层代码,在这个类中,我获取每个数据并将其存储到列表并返回列表

    using (var db = new PcisDBContext())
    {
        retAllInvoicesList = db.invoiceTables.ToList();
    }
    return retAllInvoicesList;
    

****问题:****正如您在代码和图片中看到的那样,我只返回外键号码。我应该只显示其行的另一个字段,如[公司ID到公司名称],而不是外键。

可能的解决方案:我可以到达列表中的每一行,从外键的原始表中获取所有数据,并将其替换为特定的表。但是在我的模型中有3个虚拟变量,我认为我可以使用它们来解决这个问题,但我找不到

    public virtual attentedTable attentedTable { get; set; }
    public virtual billerTable billerTable { get; set; }
    public virtual companyTable companyTable { get; set; }

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以创建如下的视图模型:

public class InvoiceViewModel
{
    public int invoiceID { get; set; }
    public string companyName { get; set; }
    public string currency { get; set; }
    public decimal? amt { get; set; }
    public DateTime? startDate { get; set; }
    public DateTime? endDate { get; set; }
    public string billerName { get; set; }
    public string attentedName { get; set; }
    public string status { get; set; }
}

然后为ViewModel的每个属性赋值:

    using (var db = new PcisDBContext())
    {
        var retAllInvoicesList= db.invoiceTables.Select(m => new InvoiceViewModel
        {
            invoiceID = m.invoiceID,
            companyName = m.companyTable.companyName,
            currency = m.currency,
            amt = m.amt,
            startDate = m.startDate,
            endDate = m.endDate,
            billerName = m.billerTable.billerName,
            attentedName = m.attentedTable.attentedName,
            status = m.status
        });
    }
   return retAllInvoicesList;

最后,您可以使用InvoiceViewModel ViewModel创建强类型视图。

注意: 默认情况下启用延迟加载,如果禁用了延迟加载,则上述查询将无效。