0

假设我有以下 3 个实体:客户、订单、产品,它们在视图中与 CustomerOrderProductViewModel.cs 交互:

我有几个控件,如列表框、数据网格等。在我的视图中显示这些实体。

这些实体应以急切加载的方式获取。这意味着我的 DAL 中有 3 个 sqldatareader。每个 sqldatareader 从表 Customer、Product、Order 中读取数据。我现在必须考虑什么 我如何将订单放入产品中并将产品放入客户列表中?将 3 个 for 循环中的每个相关数据相互读取?以及如何将相关数据放入我的 VMCollections 中,以便主详细信息保持不变。

MVVM 纯粹主义者和 alpha 极客对这个话题非常沉默。

4

1 回答 1

1

假设您在处理 DataReader 和要复制的对象的业务对象上设置了构造函数,则可以为此使用 LINQ。虽然,我对你的查询结构有点困惑,但我认为这就是你的意思。

public class ViewModel
{
    public ViewModel(DAL dal)
    {
        Customers = dal.GetCustomerFull().ToList();
    }

    public List<Customer> Customers { get; set; }
}

public class DAL
{
    public IEnumerable<Customer> GetCustomerFull()
    {
        var customers = GetCustomers().ToList();
        var products = GetProducts().ToList();
        var orders = GetOrders().ToList();

        var query = from c in customers
                    select new Customer(c)
                    {
                       Products = from p in products
                                  where p.Id = c.ProductId
                                  select new Product(p)
                                  {
                                     Orders = from o in orders
                                              where o.Id = p.OrderId
                                              select o;
                                  }
                   };

        return query;
    }

    public IEnumerable<Customer> GetCustomers()
    {
        // setup command
        var reader = new SqlDataReader(cmd);
        while (reader.Read())
        {
            yield return new Customer(reader);
        }
    }
}
于 2010-02-28T20:18:48.307 回答