Linq查询以获取表的记录,而无需使用表的对象

时间:2018-12-05 05:59:17

标签: c# sql entity-framework linq linq-query-syntax

我正在使用实体框架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创建的类的对象中,以获取该对象的所有行详细信息。如何以这种方式处理普通查询?

3 个答案:

答案 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时,因此最多会有NOOne条记录。然后-

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();
}