我正在使用此处找到的过程(Convert value when mapping)通过封装转换映射属性的类型。就像@Mykroft所说的那样,这可以防止您针对数据库编写LINQ查询。

使用下面的示例属性,编写语句db.Employee.Where(b => b.IsActive);时如何告诉Linq to Entities使用IsActiveBool?

[Column("IsActive")]
protected string IsActiveBool { get; set; }

[System.ComponentModel.DataAnnotations.Schema.NotMapped]
public bool IsActive
{
    get { return IsActiveBool == "Y"; }
    set { IsActiveBool = value ? "Y" : "N"; }
}

最佳答案

使用db.Employee.Where(b => b.IsActive);的简单示例,您可以这样编写:

db.Employee.ToList().Where(b => b.IsActive);


请记住,这将拉回Employee表中的所有行,然后对IsActive进行过滤。如果您希望SQL Server为您做过滤(您应该这样做,因为这对于任何实际大小的表都不是一个好的解决方案),那么您需要将其编写为:

db.Employee.Where(b => b.IsActiveBool == "Y");

10-05 19:23