Проблема с циклом ForEach в C # - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь включить второй цикл foreach для извлечения значений из списка внутри объекта, но у меня возникают проблемы при попытке сделать это.

Вот код

private List<Opportunity> CreateOpportunities(Basket basket)
    {
        var opps = new List<Opportunity>();

        foreach (var orderLine in basket.OrderLines)
        {
            opps.Add(new Opportunity()
            **{**
                DelegateList = new Delegates
                {
                    foreach (var delegates in orderLine.DelegatesList)
                    {
                        FirstName = delegates.FirstName,
                        LastName = delegates.LastName,
                        Email = delegates.Email
                    }
                },

                CourseId = new CourseBooking
                {
                    Id = orderLine.CourseId
                },
                Quantity = orderLine.Quantity,
                EventId = new EventBooking
                {
                    Id = orderLine.EventId
                },
                EventItemDecimalPrice = orderLine.Price,

                TaxType = new TaxType
                {
                    Id = 1,
                    Name = "UK VAT",
                    Rate = orderLine.VatRate
                },
                RegionCode = orderLine.RegionId
            });
        }

        return opps;
    }

Что мне нужно сделать, так это чтобы цикл foreach в каждой OrderLine, а затем внутри этой OrderLine имелся класс списка и foreach для его циклического перемещения, извлечения значения и объявления FirstName, LastName и Email

В настоящее время не разрешается создавать foreach и получать предупреждения о том, что он ожидает; или} перед foreach. Любая помощь будет великолепна.

Редактировать: Конструктор делегатов:

public class Delegates
{
    [JsonProperty("first_name")]
    public string FirstName { get; set; }
    [JsonProperty("last_name")]
    public string LastName { get; set; }
    [JsonProperty("email")]
    public string Email { get; set; }
}

Редактировать: Возможность (класс DelegateList)

public class Opportunity
{
    [JsonProperty("event")]
    public EventBooking EventId { get; set; }
    [JsonProperty("course")]
    public CourseBooking CourseId { get; set; }
    public int Quantity { get; set; }
    /// <summary>
    /// This is the price per person, NOT the total of the opportunity
    /// </summary>
    [JsonProperty("price")]
    public decimal EventItemDecimalPrice { get; set; }

    [JsonProperty("tax_type")]
    public TaxType TaxType { get; set; }

    [JsonIgnore]
    public string RegionCode { get; set; }

    [JsonProperty("delegates")]
    public List<Delegates> DelegateList { get; set; }

}

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Используйте Linq's Select:

opps.Add(new Opportunity()
{
    DelegateList = orderLine.DelegatesList
       .Select(orderLineDelegate => new Delegates
       {            
            FirstName = orderLineDelegate.FirstName,
            LastName = orderLineDelegate.LastName,
            Email = orderLineDelegate.Email
       })
       .ToList(),

    CourseId = ...
0 голосов
/ 08 мая 2018

Я думаю, проблема в том, что вы помещаете цикл for-each в инициализацию объекта. Вы должны переместить свой внутренний цикл for-each, прежде чем инициализировать DelegateList. Что-то вроде -

foreach (var orderLine in basket.OrderLines)
{
    var firstName;
    var lastName;
    var email;

    List<DelegateList> delegates = new List<DelegateList>();

    foreach (var delegates in orderLine.DelegatesList)
    {
        delegates.Add(new Delegates{firstName = delegates.FirstName,lastName = delegates.LastName,email = delegates.Email});
    }

    opps.Add(new Opportunity()
    {//...

Затем инициализируйте DelegateList списком, заполненным выше, во внутреннем цикле-

DelegateList = delegates;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...