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

时间:2016-03-10 16:42:30

标签: c# linq c#-4.0 c#-6.0

我有IQueryable<Anonymous>

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

Employees
{
 PersonId,
 HireDate ....
}

我有一个人的IQueryable

Person
{
 PersonId,
 Name
}

我想使用linq中的Join方法,而不是查询表达式,结果应该是带有

的IQueryable

BatchNumber和Name

(所有员工的batchNumber及其名称)

1 个答案:

答案 0 :(得分:1)

如果您的模型如下:

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属性:< / p>

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