假设我有以下3个实体:客户,订单,产品在View中与CustomerOrderProductViewModel.cs交互:
我有几个控件,如listbox,datagrid等..在我的View中显示这些实体。
这些实体应该是一种急切的装载。这意味着我的DAL中有3 sqldatareader。每个sqldatareader从表Customer,Product,Order中读取数据。我现在需要考虑的事项如何将产品和产品的订单纳入客户列表?将3个for循环中的每个相关数据相互读取?如何将相关数据放入我的VMCollections中,以便Master Detail保持不变。
MVVM纯粹主义者和阿尔法极客对此话题非常沉默。
答案 0 :(得分:1)
您可以使用LINQ,假设您在Business对象上设置了构造函数来处理DataReader和要复制的对象。虽然,我对你的查询结构有点困惑,但我认为这就是你的说法。
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);
}
}
}