2011-06-16 54 views
0

我想選擇一個不同的列表。獲取一個清晰的列表

下面的代碼是不工作:

public IQueryable<BusinessObjects.Order> GetByBusinessId(Guid Id) 
    { 
     rentalEntities db = DataContextFactory.CreateContext(); 

     List<Rental.BusinessObjects.Order> transformedList = new List<BusinessObjects.Order>(); 
     foreach (Rental.DataObjects.EntityModel.Order item in db.Orders.Where(x => x.BusinessID == BusinessId).ToList()) 
     { 
      transformedList.Add(OrderMappers.ToBusinessObject(item)); 
     } 
     return(transformedList.AsQueryable()).Distinct(); 
    } 
+1

你什麼樣的錯誤? – jgauffin 2011-06-16 07:28:08

+0

嘗試向查詢本身應用'Distinct' db.Orders.Where(x => x.BusinessID == BusinessId).Distinct()。ToList()' – oleksii 2011-06-16 07:30:26

+1

爲什麼要調用AsQueryable?爲什麼不使用Select和ToList來首先轉換爲列表?你想如何檢測「平等」的實體? – 2011-06-16 07:31:20

回答

0

你可能要檢查你的業務對象如何實現equals(),我的猜測是,他們是,即使他們有不同的(比方說)相同的ID 。

+0

我想從訂單表{客戶訂購} { }獲得特定業務的所有客戶但許多客戶做出很多訂單,所以名單是包括重複值一次又一次 – ERTJAIN 2011-06-16 07:39:51

1

試試這個:

return Rental.DataObjects.EntityModel.Order item in db.Orders 
    .Where(x => x.BusinessID == BusinessId) 
    .Distinct() 
    .Select(item => OrderMappers.ToBusinessObject(item)); 

物化查詢之前這應該在不同的操作,因爲它的應用移到底層數據庫調用 - 這是更有效,因爲重複的行不是從數據庫服務器中檢索。如果由於某種原因您不想這麼做,那麼請檢查您的等效實現(如Sorin所述)

+0

thanx彌敦道我試試這個,但它不工作 return transformedList.AsQueryable()。其中​​(x => x.BusinessID == BusinessId).Distinct(); – ERTJAIN 2011-06-16 07:48:14

+0

您的問題需要更多關於您獲得的錯誤的信息。 – Nathan 2011-06-16 08:13:18

0

您可能想嘗試MoreLinq庫中的DistinctBy()擴展方法。這使您可以輕鬆控制兩個對象的獨特性如何進行比較的確切語義。例如:

return transformedList.AsQueryable().DistinctBy(orderBO => orderBO.OrderId); 

http://morelinq.googlecode.com/files/morelinq-1.0-beta.zip