C# 得到一个不同的列表

C# 得到一个不同的列表,c#,entity-framework,C#,Entity Framework,我想选择一个不同的列表 以下代码不起作用: public IQueryable<BusinessObjects.Order> GetByBusinessId(Guid Id) { rentalEntities db = DataContextFactory.CreateContext(); List<Rental.BusinessObjects.Order> transformedList = new List<Busine

我想选择一个不同的列表

以下代码不起作用:

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();
    }
公共IQueryable GetByBusinessId(Guid Id) { rentalEntities db=DataContextFactory.CreateContext(); List transformedList=新列表(); foreach(db.Orders.Where(x=>x.BusinessID==BusinessID.ToList())中的rent.DataObjects.EntityModel.Order项) { 添加(OrderMappers.ToBusinessObject(item)); } return(transformedList.AsQueryable()).Distinct(); }
您可能需要检查业务对象如何实现Equals(),我猜它们是不同的,即使它们具有(比方说)相同的ID。

尝试以下方法:

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

这应该将distinct操作移动到底层数据库调用,因为在查询具体化之前应用了distinct操作-这更有效,因为不会从数据库服务器检索重复的行。如果出于某种原因您不想这样做,那么请检查您的equals实现(如Sorin所述)

您可能希望尝试MoreLinq库中的DistinctBy()扩展方法。这使您可以轻松地控制两个对象的精确语义,以便进行区分性比较。例如:

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

您会遇到什么类型的错误?请尝试将
Distinct
应用于查询本身
db.Orders.Where(x=>x.BusinessID==BusinessID).Distinct().ToList()
为什么要调用AsQueryable?为什么不首先使用Select和ToList转换为列表?您希望如何检测“相等”实体?我正在尝试从订单表{where customer making order}获取特定业务的所有客户,但许多客户下了许多订单,因此该列表再次包含重复值,您认为“重复”值是什么?如果一个客户有多个订单,那么这些订单当然应该算作单独的订单……我试图从订单表{where customer making order}中获取特定业务的所有客户但是很多客户下了很多订单,所以列表再次包含了重复的值,我再次尝试了这个方法,但没有成功返回transformedList.AsQueryable()。其中(x=>x.BusinessID==BusinessID).Distinct();您的问题需要更多关于您得到的错误的信息。