Linq-запрос для получения записей таблицы без использования объекта таблицы - PullRequest
0 голосов
/ 05 декабря 2018

Я использую Entity Framework 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 выглядит следующим образом: класс jeader Job - это класс, сгенерированный израбочая модель каркаса сущности для моей таблицы 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();
            }

Обычно я получаю данные для объекта, как указано выше.но мне нужно получить одно поле без чтения данных в объект класса, созданного для таблицы в модели данных, получая все подробности строки для объекта.Как обработать нормальный запрос таким образом?

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018
using (var context = new DataControllers.Allocation())
{
  var header = context.JOB_Header.OrderByDescending(j => j.JobID).FirstOrDefault();
}

Не был уверен насчет имен ваших переменных, поэтому сделал свой собственный

0 голосов
/ 05 декабря 2018

, когда мы хотим получить только имя, которое вы можете сделать с помощью изменений ниже.Концепция заключается в том, что когда вы находите мой KEY, то при максимальном значении записи NO или One.затем -

string name = string.Empty;
using (DataControllers.AllocationJAEntities = new DataControllers.Allocation())
{
    name = JAEntities.JOB_Header.Find(1)?.CustomerName;
}

обратите внимание, что я использовал метод Find, так как мы ищем с использованием первичного ключа, иначе мы можем также использовать WHERE.

ПОМНИТЕ если вы используете Find, на самом деле он запросит у вашей БД полную строку, как показано ниже SQL-запроса -

select * from table, где Id = 1

означает, что полная строка вашей БД будет возвращена для вашего конкретного идентификатора, в ваш код, а затем вы читаете только свое свойство name.

Но когда вы хотите достичь чего-то вродениже SQL-запроса -

ВЫБРАТЬ CustomerName ИЗ таблицы, ГДЕ ключ = 1

для этого случая ответ Рахула является правильным.-

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();
}
0 голосов
/ 05 декабря 2018

Почему вы не можете выбрать это поле только тогда, как показано ниже.Более того, если ваше JobID является ключевым полем (как оно выглядит), тогда я вообще не вижу необходимости в FirstOrDefault(), поскольку Where() будет возвращать только одну запись

JAEntities.JOB_Header.Where(a => a.JobID == 1).Select(x => x.CustomerName)
...