我正在使用实体框架6来开发我的c#应用程序。我已经将我的数据模型命名为Allocation模型,并且我有一个名为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创建的类的对象中,从而获得该对象的所有行详细信息。如何以这种方式处理正常查询?
using (var context = new DataControllers.Allocation())
{
var header = context.JOB_Header.OrderByDescending(j => j.JobID).FirstOrDefault();
}
不确定你的变量名,所以我做了自己的
为什么不能像下面这样只选择该字段。此外,如果你的JobID
是一个关键字段(看起来像(,那么我认为根本不需要FirstOrDefault()
,因为Where()
会只返回一条记录
JAEntities.JOB_Header.Where(a => a.JobID == 1).Select(x => x.CustomerName)
当我们只想获得您可以通过以下更改完成的名称时。概念是当你找到我的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 的表中选择*
意味着您的DB整行将返回您的特定ID和代码,然后您只读取您的name属性。
但是,当您想要实现以下SQL查询-之类的功能时
SELECT CustomerName FROM表WHERE Key=1
对于这种情况,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();
}
要获得包括订单在内的第一张记录,您可以(如Stephen所述(-
using (var context = new DataControllers.Allocation())
{
var job = context.JOB_Header.OrderByDescending(j => j.JobID).FirstOrDefault();
}