【问题标题】:Class with IEnumerable property inside another IEnumerable在另一个 IEnumerable 中具有 IEnumerable 属性的类
【发布时间】:2015-09-27 15:04:10
【问题描述】:

我有这些课程:

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,因为对于每个员工,我都会有一个包含 OrderId 和 Number 的 Orders 属性,这样我就知道属于哪个员工了

在我的存储库中,我有:

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 中,以计算我从存储过程中收到的结果。

【问题讨论】:

    标签: c#


    【解决方案1】:

    我认为除了将员工 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 类,您必须创建另一个具有员工 id 属性的类(例如 EmployeeOrder)并将其映射回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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多