2017-02-09 15 views
-1

У меня есть класс Customer, который содержит массив класса Order.Поиск минимальных 3 отдельных элементов из массива объектов с использованием LINQ в C#

class Customer 
    { 
     public string firstname { get; set; } 
     public string lastname { get; set; } 

     public Order[] orders {get; set;} 
    } 

Это мой класс заказа:

 class Order 
{ 
    public string product { get; set; } 
    public float price{get; set;} 
    public int quantity { get; set; } 
} 

Я пытаюсь найти три наименее дорогие продукты.

Я пробовал много вещей, но никто не работает. Это то, что я имею на данный момент:

var result = customer.SelectMany(x => x.orders); 
    var Least = result.Distinct().OrderBy(x => x.price).Take(3); 

я понял, что мне нужно иметь отчетливый, как у меня есть много заказов с тем же именем продукта поэтому вместо возврата наименее три дорогих продуктов это просто повторение наименее дорогой продукт 3 раза.

ответ

2

Distinct() не будет работать здесь, потому что он выбирает различные Order объектов. С точки зрения непрофессионала это означает, что заказ клиента А на 3 степлера по цене 9,99 долл. США отличается от порядка 2 клиентов от 2 степлеров по 9,99 долл. США каждый, которые также отличаются от порядка 3 клиентов с 3 степлерами по 9,99 долл. США каждый. Поэтому по существу ваш звонок Distinct() на самом деле делает ничего.

У вас есть несколько вариантов. Вы можете create an IEqualityComparer, который будет рассматривать Order S одного и тот же продукт равен, или вы можете использовать вместо GroupBy():

var query = myListOfCustomers.SelectMany(x => x.Orders) 
       .GroupBy(x => new { x.Product, x.Price }) 
       .Select(x => x.Key) 
       .OrderBy(x => x.Price) 
       .Take(3); 

ПримечаниеЭтоты относится Order S, имеющее название название продукт, но другая цена как другой продукт. Он также предполагает, что Order.Price - это цена единицы товара. Я не знаю, правильно ли выполнено одно из этих предположений.

+0

Да, это сработало! Большое спасибо! :) – jasmine

 Смежные вопросы

  • Нет связанных вопросов^_^