У меня было два списка и один репозиторий (одна таблица).
В таблице больше столбцов, но важные столбцы Id and ShippingNumbers(list of number)
Я должен объединить это из трех в соответствии с датой (который содержит дату) и номерами доставки.
Список1
var IdsList =new string[] {
"A-28.03.18-B",
"S-17.05.18-G",
"L-17.05.18-P",
"M-28.03.18-T",
"B-17.05.18-U" };
Список2
var ShippingNumbersList =new string[] {
"100,200,300",
"100,900",
"200,300,100",
"100,900,300",
"100,300" };
Таблица
TemplateRepository = {
Id: "Z-28.03.18-K", ShippingNumbers: "100,600",
Id: "P-17.05.18-R", ShippingNumbers: "900",
Id: "T-28.03.18-L", ShippingNumbers: "300" }
Я могу объединить List1 и List2, однако я не могу объединить список результатов с репозиторием. Ниже вы можете найти, что я сделал:
IList<string> myList = new List<string>();
var normalizedlist = IdsList
.Select((Ids, index) => new { Ids = Ids, ShippingNumbers = ShippingNumbersList [index].Split(',') })
.ToList();
foreach (var ShippingNumber in normalizedlist.SelectMany(x => x.ShippingNumbers).Distinct())
{
//fitering and then grouping by date
var filtered = normalizedlist.Where(y => y.ShippingNumbers.Contains(ShippingNumber))
.GroupBy(y => y.Ids.Split('-')[1])
.Where(y => y.Count() > 1)
.Select(y => y.Select(z => z.Ids));
foreach (var date in filtered)
{
myList.Add(ShippingNumber + ">>" + string.Join(",", date.ToArray()));
}
}
Вывод:
100>>A-28.03.18-B,M-28.03.18-T
100>>S-17.05.18-G,L-17.05.18-P,B-17.05.18-U
300>>A-28.03.18-B,M-28.03.18-T
300>>L-17.05.18-P,B-17.05.18-U
Я должен объединить это с репозиторием шаблонов, после объединения результат будет:
Ожидаемый результат:
100>>A-28.03.18-B,M-28.03.18-T,Z-28.03.18-K
100>>S-17.05.18-G,L-17.05.18-P,B-17.05.18-U
300>>A-28.03.18-B,M-28.03.18-T,T-28.03.18-L
300>>L-17.05.18-P,B-17.05.18-U
900>>S-17.05.18-G,P-17.05.18-R





Просто добавьте свой TemplateRepository в другие списки.
IdsList.AddRange(TemplateRepository.Select(x => x.Id));
ShippingNumbersList.AddRange(TemplateRepository.Select(x => x.ShippingNumbers));
А теперь вызовите метод объединения для IdsList и ShippingNumbersList.
Если вы не хотите изменять IdsList и ShippingNumbersList, просто создайте новый список с обеими данными.
var newIdsList = IdsList.Concat(TemplateRepository.Select(x => x.Id)).ToList();
var newShippingNumbersList = ShippingNumbersList.Concat(TemplateRepository.Select(x => x.ShippingNumbers)).ToList();
И теперь вам нужно вызвать метод объединения для newIdsList и newShippingNumbersList.
(Дружеское напоминание, пожалуйста, помечайте ответы как принятые в своих вопросах)