我遇到了LINQ结果的问题
[外键] - > [主键(PRIMARY KEY TABLE)]
[companyFK] - > [companyID(companyTable)]
[billFK] - > [billerID(billerTable)]
[attFK] - > [attentedID(attentedTable)]
*这是我的发票模型(此模型随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; }
答案 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创建强类型视图。
注意: 默认情况下启用延迟加载,如果禁用了延迟加载,则上述查询将无效。