如何在EF 6(非Linq)中使用DbSqlQuery从表中检索一些字段

时间:2017-12-08 18:06:10

标签: c# sql entity-framework linq

使用EF,根据以下费率模型创建费率表:

public class Rate
{
     [Key]
    public int IdNo { get; set; }
    public string RateCode { get; set; }
    public string RateClass { get; set; }
    public string Basis { get; set; }
    public bool RateIsActive { get; set; }
    public DateTime? ValidFrom { get; set; }
    public DateTime? ValidTo { get; set; }
    public bool IsReservRate { get; set; }
    public decimal? CostDay { get; set; }
    public decimal? CostWeek { get; set; }
    public decimal? CostMonth { get; set; }
    public decimal? CostHour { get; set; }
}

使用以下代码从Rates表中检索所有列没有问题:

using (AppDbContext db = new AppDbContext())
{
    DbSqlQuery<Rate> data = db.Rates.SqlQuery("select * from Rates");
}

但我需要的是从表中只选择两列

DbSqlQuery<Rate> data = db.Rates.SqlQuery("select Rate, Class from Rates");

它给了我以下错误:

  

数据阅读器与指定的RPManager.Models.Rate&#39;不兼容。该类型的成员&#39; RateIsActive&#39;在数据阅读器中没有相应的列具有相同的名称。

有没有办法激活所需的东西? 注意!!!!我知道如何使用Linq,但对于这个特定的情况,如果可能的话,必须使用db.Rates.SqlQuery()

1 个答案:

答案 0 :(得分:0)

  

有没有办法激活所需的东西?

不提供代码。你有几个选择。

您最好的选择:

创建一个代表所需内容的类,而不是仅仅因为而重用类:

public class RateInfo
{
  public x Rate { get; set; }
  public x Class { get; set; }
}

var data = db.Rates.SqlQuery<RateInfo>("select Rate, Class from Rates");

或者不太好;通过sql别名设置默认值:

// assumming you have an Id column
var data = db.Rates.SqlQuery<Rate>("select 0 as ID, Rate, Class from Rates");