Получить отдельный список - PullRequest
0 голосов
/ 16 июня 2011

Я хочу выбрать отдельный список.

Следующий код не работает:

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 ]

1 голос
/ 16 июня 2011

Попробуйте это:

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

Это должно переместить отдельную операцию в базовый вызов базы данных, поскольку она применяется до того, как запрос материализован - это более эффективно, поскольку дублированные строки не извлекаются с сервера базы данных. Если по какой-то причине вы не хотите этого делать, то проверьте реализацию «равно» (как упомянул Сорин)

0 голосов
/ 16 июня 2011

Возможно, вы захотите попробовать метод расширения DistinctBy () из библиотеки MoreLinq. Это позволяет вам легко контролировать точную семантику сравнения двух объектов на предмет различимости. Например:

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

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

0 голосов
/ 16 июня 2011

Возможно, вы захотите проверить, как ваши бизнес-объекты реализуют Equals (), я думаю, что они разные, даже если у них (скажем, один и тот же идентификатор).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...