2010-03-15 50 views
0

假設我想填充基於客戶實體框架模型構建的CustomerViewModel的列表,其中一些字段(如餘額)單獨計算。在哪裏執行LINQ到實體查詢的額外邏輯?

下面我有用於列表的代碼 - 它是在我的服務層實現的,但是當我從數據庫中獲取一個項目並執行時,我想執行此代碼,以及在不同的服務中訪問客戶數據。

我應該怎麼做才能確保性能,而不是重複代碼 - 用於計算平衡的代碼?

public List<CustomerViewModel> GetCustomerViewModelList() 
{ 
    IQueryable<CustomerViewModel> list = from k in _customerRepository.List() 
    select new CustomerViewModel 
    { 
     Id = k.Id, 
     Name = k.Name, 
     Balance = 
     k.Event.Where(z => z.EventType == (int) EventTypes.Income).Sum(z => z.Amount) 
    }; 
    return list.ToList(); 
} 

回答

2

在你的商業試試這個(服務)層:

private List<CustomerViewModel> GetCustomerViewModelList(IQueryable<Customer> customerList) 
{ 
    vaar list = from k in customerList 
    select new CustomerViewModel 
    { 
     Id = k.Id, 
     Name = k.Name, 
     Balance = 
      k.Event.Where(z => z.EventType == (int) EventTypes.Income).Sum(z => z.Amount) 
    }; 
    return list.ToList(); 
} 

public List<CustomerViewModel> GetCustomerViewModelListForAllCustomers 
{ 
    return GetCustomerViewModelList(_repository.List()); 
} 

public CustomerViewModel GetCustomerViewModelListForOneCustomers(int id) 
{ 
    return GetCustomerViewModelList(_repository.List().Where(c => c.Id == id)).First(); 
} 

_repository.List()必須返回IQueryable的。