使用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()
答案 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");