Как заполнить список <T>внутри .Select () с помощью LINQ - PullRequest
2 голосов
/ 26 апреля 2011

Я пытаюсь заполнить IEnumerable<ResortSupplier> из ответа XML, используя следующий запрос LINQ: Как мне заполнить / создать IList<PerPricing> PricingDetail внутри моего запроса LINQ? В текущем сценарии будет * ТОЛЬКО один элемент (PerPricing) в IList<PerPricing>, НО это должен быть IList для будущих опций и для поддержки некоторых других функций. Я получаю сообщение об ошибке ниже.

var resortPricing =
    xDoc.Elements("ResortPricingRS")
    .Elements("ResortPricing")
    .GroupBy(x => new
    {
        ID = x.Element(XName.Get("ResortId")).Value
    }
            )
    .Select(x => new ResortSupplier
    {
        SupplierCode = x.Key.ID,
        ResortProducts = x.Select(i => new Product
        {
            Code = i.Element("RoomCategory").Value,
            Description = i.Element("CategoryDesc").Value,
            Rating = (i.Elements("StarRatingCode").Any() ? i.Element("StarRatingCode").Value : ""),
            PricingDetail = { 
                            new PerPricing { 
                                    PricingType = "PerRoom",
                                    GroupNumber = 1 
                                    Price = decimal.Parse(i.Elements("TotalPrice").Any() ? i.Element("TotalPrice").Value : "0"),
                                    PricingError = (i.Elements("PricingError").Any() ? new Error { ErrorCode = i.Element("PricingError").Value } : null)
                                            } 
                            }
        }
                                ).ToList()
    }
            ).OrderBy(x => x.SupplierCode);

Вот мои объекты:

[Serializable]
public class ResortSupplier
{
    public string SupplierCode { get; set; }
    public IList<Product> ResortProducts { get; set; }
}

[Serializable]
public class Product
{
    public string Code { get; set; }
    public string Description { get; set; }
    public string Rating { get; set; }
    public IList<PerPricing> PricingDetail { get; set; }
}

[Serializable]
public class PerPricing
{
    public string PricingType { get; set; }
    public int GroupNumber { get; set; }
    public decimal? Price { get; set; }
    public Error PricingError { get; set; }
}

1 Ответ

1 голос
/ 26 апреля 2011

Добавить new [] вроде так:

PricingDetail = new [] { 
                        new PerPricing { 
                                PricingType = "PerRoom",
                                GroupNumber = 1 
                                Price = decimal.Parse(i.Elements("TotalPrice").Any() ? i.Element("TotalPrice").Value : "0"),
                                PricingError = (i.Elements("PricingError").Any() ? new Error { ErrorCode = i.Element("PricingError").Value } : null)
                                        } 
                        }
    }
                            ).ToList()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...