У меня есть список, содержащий несколько BW
объектов с 2 свойствами , равными shape
и quantity
.
В зависимости от значения preShape
и значения preQuantity
, я буду сортировать по каждому элементу в List<BW>
с preShape
и preQuantity
. shape
имеет приоритет сначала , затем quantity
имеет второй приоритет. Я отсортировал List<BW>
по GroupBy
, затем отсортировал по shape
и quantity
зависит от preShape
и preQuantity
. Результат отлично выглядит так:
- Значение «предварительной формы»: MN22
- Значение «предварительной величины»: 20
| shape | quantity|
--------|----------
| MN22 | 20 |
| MN22 | 14 |
| MN11 | 20 |
| MN11 | 10 |
| ANT | 20 |
| ANT | 18 |
| ANT | 16 |
| ANT | 10 |
Но мне бы хотелось, чтобы List<BW>
был таким:
| shape | quantity|
--------|----------
| MN22 | 20 |
| MN22 | 14 |
| MN11 | 10 |
| MN11 | 20 |
| ANT | 20 |
| ANT | 10 |
| ANT | 16 |
| ANT | 18 |
Я пытался использовать цикл for
и функцию swap
для сортировки, но результат некак то, что я ищу.
Я хотел бы отсортировать по списку с результатом, подобным 2-й таблице.
Мне нужно сгруппировать shape , чтобы объединить их в группу, и я буду сравнивать форма каждого элемента в Списке с предварительной формой , если они совпадают, я отсортирую Список с предварительной формой , затем количество будет вторым условием. Но за количеством последнего товара в группе A должно следовать то же самое количество первого товара в группе B. Если они не совпадают, то количество первого элемента в группе B будет отсортирован ASC.
Я прилагаю свой код здесь для более подробного описания мой код dottnetfiddle
public static void Main()
{
List<BW> lst = new List<BW>(){
new BW(){ shape = "MN11", quantity = 20},
new BW(){ shape = "MN11", quantity = 10},
new BW(){ shape = "MN22", quantity = 14},
new BW(){ shape = "MN22", quantity = 20},
new BW(){ shape = "ANT", quantity = 16},
new BW(){ shape = "ANT", quantity = 18},
new BW(){ shape = "ANT", quantity = 20},
new BW(){ shape = "ANT", quantity = 10}
};
string preShape = "MN22";
int preQuantity = 20;
var tempList = lst.GroupBy(c=>c.shape).Select(g=> new {shapeGroup = g.Key, BW = g.OrderBy(c=> c.shape.Equals(preShape)).ThenByDescending(c=>c.quantity)}).OrderByDescending(g=>g.shapeGroup.Equals(preShape));
//var tempList = lst.GroupBy(c=>c.shape).Select(g=> new {shapeGroup = g.Key, BW = g.OrderByDescending(c => c.shape.Equals(preShape))}).OrderBy(g=>g.BW.First().quantity == preQuantity);;
foreach (var shape in tempList)
{
var lastGroupBW_Item = shape.BW.LastOrDefault();
//Console.WriteLine("{0}", shape.shape);
foreach (var bw in shape.BW)
{
if(shape.BW.ToList().IndexOf(bw) > 0 )
{
shape.BW.OrderBy(c=>c.quantity == lastGroupBW_Item.quantity).ThenBy(c=>c.quantity);
}
Console.WriteLine("{0}|{1}", bw.shape,bw.quantity);
}
}
}
Последний результат я быхотел бы иметь, как вторая таблица, которую я описал выше. Заранее спасибо!