自定义由linq-query填充的DataGridView
Customize DataGridView filled by linq-query
我有 2 个 SQL-表,我通过 SQL Server Managment Studio(包括 PK 和 FK)创建的:
sql-tables
在我 Visual Studio 的 WinForm 项目中,我通过 Code First 添加数据模型到现有数据库 并通过以下 linq 查询读取数据:
dataGridView1.DataSource = dbContext.deliveries.OrderBy(d => d.id).ToList();
现在 datagridView1 由 table“交付”中的列组成,但我不想显示列 customer_id,而是显示相应的列客户的姓名和地址。
Whosebug 上的一些其他答案建议编辑查询并使用“include”属性。所以我尝试使用
deliveries.Include(d=>d.customer.name).OrderBy(d => d.id).ToList();
但这会引发异常,而 运行 会出现以下错误:
The EntityType '*.customer' does not declare a navigation property with the name 'name'
我不明白,因为我的 类 遵循 https://docs.microsoft.com/en-us/ef/ef6/fundamentals/relationships 的形式并且是通过 Code First 从现有数据库.[=17= 创建的]
public partial class deliveries
{
public int id { get; set; }
public int? amount { get; set; }
public int? customer_id { get; set; }
[ForeignKey("customer_id")]
public virtual customer customer { get; set; }
}
public partial class customer
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public customer()
{
deliveries = new HashSet<deliveries>();
}
[Key]
public int customerID { get; set; }
[StringLength(50)]
public string name { get; set; }
[StringLength(10)]
public string address { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<deliveries> deliveries { get; set; }
}
如果您只想显示特定值,则必须进行自定义投影并通过 Select
指定结果的形状。可以是DTO也可以是匿名的class,不需要Include。
var result = deliveries
.OrderBy(d => d.id)
.Select(d => new
{
d.customer.name,
d.customer.address
})
.ToList();
我有 2 个 SQL-表,我通过 SQL Server Managment Studio(包括 PK 和 FK)创建的:
sql-tables
在我 Visual Studio 的 WinForm 项目中,我通过 Code First 添加数据模型到现有数据库 并通过以下 linq 查询读取数据:
dataGridView1.DataSource = dbContext.deliveries.OrderBy(d => d.id).ToList();
现在 datagridView1 由 table“交付”中的列组成,但我不想显示列 customer_id,而是显示相应的列客户的姓名和地址。
Whosebug 上的一些其他答案建议编辑查询并使用“include”属性。所以我尝试使用
deliveries.Include(d=>d.customer.name).OrderBy(d => d.id).ToList();
但这会引发异常,而 运行 会出现以下错误:
The EntityType '*.customer' does not declare a navigation property with the name 'name'
我不明白,因为我的 类 遵循 https://docs.microsoft.com/en-us/ef/ef6/fundamentals/relationships 的形式并且是通过 Code First 从现有数据库.[=17= 创建的]
public partial class deliveries
{
public int id { get; set; }
public int? amount { get; set; }
public int? customer_id { get; set; }
[ForeignKey("customer_id")]
public virtual customer customer { get; set; }
}
public partial class customer
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public customer()
{
deliveries = new HashSet<deliveries>();
}
[Key]
public int customerID { get; set; }
[StringLength(50)]
public string name { get; set; }
[StringLength(10)]
public string address { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<deliveries> deliveries { get; set; }
}
如果您只想显示特定值,则必须进行自定义投影并通过 Select
指定结果的形状。可以是DTO也可以是匿名的class,不需要Include。
var result = deliveries
.OrderBy(d => d.id)
.Select(d => new
{
d.customer.name,
d.customer.address
})
.ToList();