【发布时间】:2026-01-03 02:10:01
【问题描述】:
使用 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”不兼容。类型的成员“RateIsActive”在数据读取器中没有同名的对应列。
有没有办法激活所需的东西? 笔记!!!!我知道如何使用 Linq 来完成,但对于这种特定情况,如果可能的话,必须使用 db.Rates.SqlQuery()
【问题讨论】:
-
从有效的方法中,你有Rate 和Class 栏吗?使用 * 应该给出所有列名。
-
能否提供Rate实体。
-
仅当您具体化为仅具有属性子集的类时。为什么要创建不完整的
Rate实体? -
@Gert Arnold 避免通过网络发送不必要的数据。一旦选择了速率/等级,那么只有一行包含所有列就足够了。但我明白你的意思,我已经在其他情况下应用了它。如果您知道这是唯一的方法,并且如果您将其作为答案发布,我将接受它。
标签: c# sql entity-framework linq