【问题标题】:How to convert this query into lamda expression如何将此查询转换为 lambda 表达式
【发布时间】:2019-10-03 06:28:17
【问题描述】:

Convert this query into lamda Expression 怎么写?

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;

【问题讨论】:

    标签: c# linq join lambda


    【解决方案1】:

    如果你想选择列表,那么你可以使用:

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

    这将返回对象列表。

    如果你想只选择一个值,那么你可以使用:

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

    这将只返回一个值。

    【讨论】:

      【解决方案2】:

      首先,欢迎来到 SO!

      我猜您正在使用 LINQ-to-Entities,并鼓励您保留当前使用的语法。当谈到加入时,我个人认为它更具可读性。但是如果你想将你的表达式转换为 lambda,这应该是等价的:

      // 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 则完全不同。

      【讨论】:

        猜你喜欢
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-14
        • 2020-06-01
        • 1970-01-01
        相关资源
        最近更新 更多