Как преобразовать этот запрос в лямда-выражение - PullRequest
0 голосов
/ 03 октября 2019

Как написать Преобразовать этот запрос в выражение lamda?

from lst in from employee in dbe.employees
            join ordermaster in dbe.ordermasters 
                              on employee.emp_id 
                              equals ordermaster.emp_id
            select new
            {
              emp_name = employee.emp_name,
              emp_id = ordermaster.emp_id,
              order_date = ordermaster.Order_date
            }
where EntityFunctions.DiffMonths(lst.order_date, dt) == 3
select lst;

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Во-первых, добро пожаловать в SO!

Полагаю, вы используете LINQ-to-Entities и хотели бы сохранить синтаксис, который вы используете в данный момент. Когда дело доходит до объединений, я лично считаю, что это гораздо более читабельно. Но если вы хотите преобразовать свое выражение в лямбду, это должно быть эквивалентно:

// models just for testing...
var employees = new List<Employee>()
{
    new Employee()
    {
        emp_id = 1,
        emp_name = "Name 1"
    },
    new Employee()
    {
        emp_id = 2,
        emp_name = "Name 1"
    },
    new Employee()
    {
        emp_id = 3,
        emp_name = "Name 1"
    }
};
var ordermasters = new List<OrderMaster>()
{
    new OrderMaster()
    {
        emp_name = "Name 1",
        emp_id = 1,
        Order_date = DateTime.Now
    },
    new OrderMaster()
    {
        emp_name = "Name 3",
        emp_id = 3,
        Order_date = DateTime.Now.AddDays(1)
    }
};

var result = employees.Join(ordermasters, // Replace employees and ordermasters with your tables.
        e => e.emp_id,
        o => o.emp_id,
        (empl, ord) => new { Employees = empl, OrderMasters = ord })
    .Where(arg => EntityFunctions.DiffMonths(arg.OrderMasters.Order_date, dt) == 3)
   .Select(arg => new
   {
       emp_name = arg.Employees.emp_name,
       emp_id = arg.OrderMasters.emp_id,
       order_date = arg.OrderMasters.Order_date
   });

Что касается LINQ, он должен возвращать тот же результат. Если он конвертируется в один и тот же SQL, это совершенно другое.

0 голосов
/ 03 октября 2019

Если вы хотите выбрать список, вы можете использовать:

var x = UtAccuralLstForComp.Where (x => x.VendorName == Name) .ToList ();

Это вернет список объектов.

Если вы хотите выбрать только одно значение, вы можете использовать:

var x = UtAccuralLstForComp.Where (x => x.VendorName == Имя). Выберите (x => x.VendorNumber);

Это вернет только одно значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...