连接语句中的条件的Lambda

Eld*_*dho 2 c# linq lambda

我必须Employee根据他们进行过滤department。我可以使用LINQ进行相同的操作。

Linqlambda编译以得到相同的结果。编译器Lambda expression在编译之前将查询表达式更改为等效表达式,因此生成的IL完全相同。资源

var deptCollection = new List<Dept>();
var employeeCollection = new List<Employee>();

employeeCollection.Add(new Employee { Id = 1, Name = "Eldho" });

deptCollection.Add(new Dept { DepetarmentName = "a", EmployeeId = 3 });
deptCollection.Add(new Dept { DepetarmentName = "a", EmployeeId = 1 });

var empinadept = (from e in employeeCollection
                  from dep in deptCollection
                  where e.Id == dep.EmployeeId
                  && dep.DepetarmentName == "a"
                  select e)
                 .ToList();
Run Code Online (Sandbox Code Playgroud)

我无法.Where在此Lambda中添加子句

var empindeptLamda = employeeCollection
                     .Join(deptCollection,
                     emp => emp.Id, dep => dep.EmployeeId,
                     (em, dep) => em.Id == dep.EmployeeId
                      && dep.DepetarmentName == "a")
                     .ToList();

class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
}

class Dept
{
    public int EmployeeId { get; set; }
    public string DepetarmentName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Q1。上面的linq的等效lambda语句是什么?(如何在方法语法中的linq中添加where子句

Gil*_*een 5

与此等效:

var empinadept = (from e in employeeCollection
              from dep in deptCollection
              where e.Id == dep.EmployeeId
              && dep.DepetarmentName == "a"
              select e)
             .ToList();
Run Code Online (Sandbox Code Playgroud)

这是:

var result = employeeCollection.Join(deptCollection,
        e => e.Id,
        dep => dep.EmployeeId,
        (e,dep) => new { e, dep })
    .Where(item => item.dep.DepetarmentName == "a")
    .Select(item => item.e)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

更好的选择是:

var result = employeeCollection.Join(
            deptCollection.Where(dep => dep.DepetarmentName == "a"),
            e => e.Id,
            dep => dep.EmployeeId,
            (e,dep) => e)
       .ToList();
Run Code Online (Sandbox Code Playgroud)

最接近查询语法的(但我会说这不是基于意见的):

var result = employeeCollection.Join(
        deptCollection,
        e => new { e.Id, "a" },
        dep => new { dep.EmployeeId, dep.DepartmentName },
        (e,dep) => e).ToList();
Run Code Online (Sandbox Code Playgroud)