Как я могу добавить к существующему массиву / ienumerable коллекции в цикле foreach - PullRequest
0 голосов
/ 24 января 2019

В моем коде есть список идентификаторов, которые я циклически повторяю в цикле foreach.

Идентификаторы относятся к записи в БД, и я пытаюсь извлечь элементы, относящиеся к каждой записи в БД, в один массив, который я затем могу вернуть в JSON

Это то, что у меня есть, но я возвращаю только элементы, принадлежащие последнему идентификатору.

List<int> IDs = new List<int>(bomIds.Split(',').Select(int.Parse));
IEnumerable<BOMItemSummary> bomItemArray = Enumerable.Empty<BOMItemSummary>();
foreach (var value in IDs)
{


    BOM bom = db.BOMs.Find(value);
    if (bom != null)
    {
        // Got project, get spec items

        bomItemArray = bom.BOMLineItems.Select(bomItem => new BOMItemSummary
        {
            bomItem = bomItem,
            //partNumber = (bomItem.ProductLink.SupplierProductCode != null) ? bomItem.ProductLink.SupplierProductCode : ""
        });


    }
}
jsonResult = Json(new
{
    apiStatus = Utils.Json.JSON_returnStatusSuccess,
    //bomTotal = (bom.BOMValue.HasValue ? bom.BOMValue.Value.ToString("0.00") : "0.00"),
    bomItemArray = bomItemArray,
}, JsonRequestBehavior.AllowGet);

После этого мне нужно выбрать разные значения, где продукт одинаков, но объединить количества, поэтому решение должно учитывать это

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Вы заменяете bomItemArray каждый раз в цикле foreach. Вы должны использовать bomItemArray.Append для добавления новых предметов.

Я предлагаю изменить тип bomItemArray на List.

var bomItemArray = new List<BOMItemSummary>();

и затем в цикле foreach

bomItemArray.AddRange(bom.BOMLineItems.Select(bomItem => new BOMItemSummary
        {
            bomItem = bomItem,
            //partNumber = (bomItem.ProductLink.SupplierProductCode != null) ? bomItem.ProductLink.SupplierProductCode : ""
        }));
0 голосов
/ 24 января 2019

Вы можете получить код, извлекающий необходимую вам информацию в методе, и использовать yield return, чтобы получить IEnumerable<YourResult>.

Я думаю, это будет чище.

0 голосов
/ 24 января 2019

Зачем использовать IEnumerable<>? Это тривиально, чтобы сделать с List.AddRange:

List<BOMItemSummary> bomItems = new List<BOMItemSummary>();
...

var bomItemsForId = bom.BOMLineItems.Select(bomItem => new BOMItemSummary
{
    ...
});
bomItems.AddRange(bomItemsForId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...