Ниже мои модели:Получение неуместное ранга во время объединения и организации 2 списка
public class Test
{
public int TestId { get; set; }
public List<VariantsRank> VariantsRanks { get; set; }
}
public class VariantsRank
{
public int VariantId { get; set; }
public string Name { get; set; }
public int Rank { get; set; }
}
Я существующий Test
экземпляр, который содержит следующие значения для VariantsRanks
VariantId = 10, Name = "V1", Rank = 0
VariantId = 11, Name = "V2", Rank = 1
Я тогда необходимо слить после VariantsRank
VariantId = 12, Name = "V3", Rank = 0
VariantId = 13, Name = "V4", Rank = 1
и увеличиваем Rank
производить следующие выходные данные
VariantId = 10, Name = "V1", Rank = 0
VariantId = 11, Name = "V2", Rank = 1
VariantId = 12, Name = "V3", Rank = 2
VariantId = 13, Name = "V4", Rank = 3
и я использую следующий код, который работает правильно (List1
является первоначальный список, и List2
список должны быть объединены)
int highestOrder = (List1.VariantsRanks.Max(cpo => cpo.Rank)) + 1;
foreach (var rank in List2.VariantsRanks)
{
var match = List1.VariantsRanks.FirstOrDefault(x => x.VariantId == rank.VariantId);
if (match != null) // found
{
match.Rank = rank.Rank;
}
else
{
rank.Rank = highestOrder;
highestOrder = highestOrder + 1;
List1.VariantsRanks.Add(rank);
}
}
I затем необходимо объединить следующие VariantsRank
в новый список (обратите внимание на соответствующие значения VariantId
, но они находятся в обратном порядке)
VariantId = 13, Name = "V4", Rank = 0
VariantId = 12, Name = "V3", Rank = 1
, так что выход должен быть
VariantId = 10, Name = "V1", Rank = 0
VariantId = 11, Name = "V2", Rank = 1
VariantId = 13, Name = "V4", Rank = 2
VariantId = 12, Name = "V3", Rank = 3
однако приведенный выше код вместо выводит
VariantId = 10, Name = "V1", Rank = 0
VariantId = 11, Name = "V2", Rank = 1
VariantId = 12, Name = "V3", Rank = 1
VariantId = 13, Name = "V4", Rank = 0
и Rank
значения не увеличивается правильно
Как изменить код, чтобы убедиться, что дубликат VariantId
не добавляются, но увеличиваются Rank
?
В коде должен быть вопрос, а не ссылка на скрипку. –
@StephenMuecke: На самом деле это увеличило бы длину моего вопроса и причину для того, чтобы дать скрипку, поскольку вам было бы легко непосредственно увидеть результат и непосредственно работайте с кодом, как указано Enigmativity before.Long вопрос не получает внимания –
Сократите свой существующий код до 2 элементов в списке и покажите код, в котором вы манипулируете списком - вот что важно (и скрипка даже не работает - его тайм-аут) –