我正在使用实体框架6开发我的c#应用程序。我已将数据模型命名为“分配模型”,并且有一个名为JobTable的表。
我的数据库模型类如下
public partial class Allocation : DbContext
{
public Allocation()
: base("name=Allocation")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<JOB_Header> JOB_Header { get; set; }
}
我的工作标题看起来像这样
我的Job标头类看起来像这个Job jeader类是从实体框架工作模型为我的表Job_header生成的类
public partial class JOB_Header
{
public int JobID { get; set; }
public string CustomerCode { get; set; }
public string CustomerName { get; set; }
public string MobileNo { get; set; }
public string LocationCode { get; set; }
public System.DateTime JobDate { get; set; }
public bool Status { get; set; }
public string Remarks { get; set; }
}
如何查询如下所示的sql查询数据?
SELECT TOP 1 * FROM JOB_Header ORDER BY JOBID DESC;
select CustomerName from JOB_Header where JobID =1;
using (DataControllers.AllocationJAEntities = new DataControllers.Allocation())
{
JHeaderModel = JAEntities.JOB_Header.Where(a => a.JobID == 1).FirstOrDefault();
}
通常,我会获得上述对象的数据。但是我需要一个单一字段而不将数据读取到在数据模型中为Table创建的类的对象中,以获取该对象的所有行详细信息。如何以这种方式处理普通查询?
答案 0 :(得分:4)
using (var context = new DataControllers.Allocation())
{
var header = context.JOB_Header.OrderByDescending(j => j.JobID).FirstOrDefault();
}
不确定您的变量名,所以将其设为我自己的
答案 1 :(得分:2)
为什么不能只选择该字段,如下所示。而且,如果您的JobID
是一个关键字段(看起来像),那么我根本看不到需要FirstOrDefault()
,因为Where()
只会返回一条记录< / p>
JAEntities.JOB_Header.Where(a => a.JobID == 1).Select(x => x.CustomerName)
答案 2 :(得分:2)
当我们只想通过以下更改获得名称时。这个概念是当您找到我的KEY
时,因此最多会有NO
或One
条记录。然后-
string name = string.Empty;
using (DataControllers.AllocationJAEntities = new DataControllers.Allocation())
{
name = JAEntities.JOB_Header.Find(1)?.CustomerName;
}
注意,由于我们使用主键进行搜索,因此我使用了Find
方法,否则我们也可以使用WHERE
。
记住(如果您使用Find
实际上,它将像下面的SQL查询一样在数据库中查询整行-
从Id = 1的表中选择*
意味着您的数据库完整行将返回您的特定ID,返回到您的代码,然后您只读取name属性。
但是当您想要实现以下SQL查询-
从表WHERE键= 1中选择CustomerName
对于这种情况,Rahul的回答是正确的。 -
string name = string.Empty;
using (DataControllers.AllocationJAEntities = new DataControllers.Allocation())
{
name = JAEntities.JOB_Header
.Where(a => a.JobID == 1)
.Select(x => x.CustomerName)
.FirstOrDefault();
}
要获取包括订单在内的第一条记录(如上所述,斯蒂芬)-
using (var context = new DataControllers.Allocation())
{
var job = context.JOB_Header.OrderByDescending(j => j.JobID).FirstOrDefault();
}