我想选择一个不同的列表。
以下代码无效:
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();
}
答案 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);