将匿名类型的 属性 加入元素列表

Join a property of an anonymous type with a list of elements

我有一个IQueryable<Anonymous>

Anonymous
{
   field = BatchNumber,
   list = list of Employees
}

Employees
{
 PersonId,
 HireDate ....
}

我有一个 IQueryable of Person

Person
{
 PersonId,
 Name
}

我想使用 linq 的 Join 方法,而不是查询表达式,结果应该是一个 IQueryable with

批号和名称

(所有员工批号及姓名)

如果您有这样的模型:

class Anonymous
{
    public string Field { get; set; }
    public List<Employee> Employees { get; set; }
}

class Employee
{
    public int PersonId { get; set; }
    ...
}

class Person
{
    public int PersonId { get; set; }
    public string Name { get; set; }
}

像这样的对象:

IQueryable<Anonymous> anonymous = ...;
IQueryable<Person> persons = ...;

对于每个 Anonymous,您可以使用 BatchNumberName 连接 Employees 属性 和 persons 对象生成新对象 PersonId 属性:

var result = anonymous.SelectMany(a => 
                                  a.Employees.Join(persons, 
                                                   e => e.PersonId, 
                                                   p => p.PersonId, 
                                                   (e, p) => new 
                                                   {
                                                       BatchNumber = a.Field,
                                                       Name = p.Name
                                                   }));

这会生成包含两个属性的对象集合:BatchNumberName