获取一份清晰的清单

时间:2011-06-16 07:23:15

标签: c# entity-framework

我想选择一个不同的列表。

以下代码无效:

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();
    }

3 个答案:

答案 0 :(得分:1)

试试这个:

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

这应该将不同操作移动到底层数据库调用,因为它是在实现查询之前应用的 - 由于未从数据库服务器检索重复行,因此效率更高。如果由于某种原因你不想这样做,那么检查你的equals实现(如Sorin所述)

答案 1 :(得分:0)

你可能想检查你的业务对象如何实现Equals(),我猜他们是不同的,即使他们有(比方说)相同的ID。

答案 2 :(得分:0)

您可能想尝试使用MoreLinq库中的DistinctBy()扩展方法。这使您可以轻松控制两个对象如何比较清晰度的确切语义。例如:

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

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