在另一个IEnumerable中具有IEnumerable属性的类

本文关键字:IEnumerable 属性 另一个 | 更新日期: 2023-09-27 18:14:38

我有这些类:

public class InitialData
{        
    public IEnumerable<Employee> Employees { get; set; }        
}
public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }        
    public IEnumerable<Orders> Orders { get; set; }
}
public class Orders
{        
    public int OrderId { get; set; }
    public int Number { get; set; }
}

我有一个存储过程,它返回如下两个结果集

Id  Name
--  ----
1   John
2   Marc
3   Bruce 
Id  OrderId Number
--  ------- ------
1   1       23423
1   2       56777
2   3       44445

第二个结果集与雇员Id有关系,雇员Id 3没有任何订单。

我想要得到所有的订单,并把它们放在没有员工Id的Employee类中,只有OrderId和Number,因为对于每个Employee,我将有一个Orders属性,它将包含OrderId和Number,这样我就知道哪个Employee属于

在我的存储库中有:

var model = new InitialData();
using (var db = new AuditContext())
{
    var cmd = db.Database.Connection.CreateCommand();
    cmd.CommandText = "[dbo].[EnployeeDataSelect]";
    cmd.CommandType = CommandType.StoredProcedure;
    try
    {
        db.Database.Connection.Open();
        var reader = cmd.ExecuteReader();
        reader.NextResult();
        model.Employees = ((IObjectContextAdapter)db).ObjectContext.Translate<Employees>(reader).ToList();
        Now how can I put the orders under the Employees property of InitialData class filter each with the Id?
        ???
    }
    catch (Exception e)
    {
    }
}

我想过滤每个员工的订单,并将它们放入属性orders中,以计算从存储过程收到的结果。

在另一个IEnumerable中具有IEnumerable属性的类

我认为除了将员工id放在订单类中之外,您没有太多选择。

class Order
{ 
    public int Id {get; set;}
    public int OrderId {get; set;}
    public int Number {get; set;
}
...
var oc = (IObjectContextAdapter)db).ObjectContext;
var orders = oc.Translate<Order>(reader).ToLookup(x => x.Id);
foreach(var employee in model.Employees)
    employee.Orders = orders[employee.Id].ToList();

如果你绝对不想添加雇员id属性到你的Order类,你必须创建另一个类(例如EmployeeOrder),有一个雇员id属性,并映射回Order:

class EmployeeOrder
{ 
    public int Id {get; set;}
    public int OrderId {get; set;}
    public int Number {get; set;
}
...
var orders = oc.Translate<EmployeeOrder>(reader).ToLookup(x => x.Id);
employee.Orders = orders[employee.Id].Select(x => new Order
{
    OrderId = x.OrderId,
    Number = x.Number
}.ToList();