2011-06-16 52 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