Почему лямбда-выражение возвращает System.Linq.Enumerable + WhereSelectEnumerableIterator`2 в результате - PullRequest
0 голосов
/ 27 февраля 2019

Я получаю следующую строку в качестве результата при возврате списка строк с использованием лямбда-выражения:

System.Linq.Enumerable + WhereSelectEnumerableIterator`2 [HOrg.ServiceCatalog.Contracts.Models.IOfferProperty,System.String]

Мой код:

    IList<string> offerIds = new List<string>();
    foreach (var offer in offerProperties)
    {
       offerIds.Add(offer
         .Where(x => x.PropertyDefinitionId == propertyDefinitionId)
         .Select(x => x.OfferId)
         .ToString());
    }

В цикле foreach переменная предложения содержит ожидаемые значения.Но когда я создаю условие, используя лямбда-выражение, в результате возвращается System.Linq.Enumerable + WhereSelectEnumerableIterator`2 .

При поиске я получил несколько предложений, таких как

  1. Копирование результатов лямбда-выражений в отдельный список
  2. Используйте ToList() для лямбда-выражения, затем присвойте его переменной результата

и другие предложения,Но никакой ответ мне не поможет.

Кто-нибудь знает, что не так в этом коде?

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Если вы ожидаете одного результата для каждого предложения, попробуйте:

IList<string> offerIds = new List<string>();
foreach (var offer in offerProperties)
{
   offerIds.Add(offer.Where(x => x.PropertyDefinitionId == propertyDefinitionId).Select(x => x.OfferId).FirstOrDefault()?.ToString());
}
0 голосов
/ 27 февраля 2019

Мне кажется, что вы хотите, чтобы набор offerIds представлял собой строку, в которой несколько свойств присоединены к offerproperties.

Если это так, то вы ищете функцию addrange.Также переместите ваш вызов ToString() в оператор select, а не после него.

IList<string> offerIds = new List<string>();
foreach (var offer in offerProperties)
{
    offerIds.AddRange(offer.Where(x => x.PropertyDefinitionId == propertyDefinitionId).Select(x => x.OfferId.ToString()));
}

Теперь для каждого предложения в его offerIds IList

добавляется набор строк OfferId.
0 голосов
/ 27 февраля 2019

Вместо преобразование последовательности в String:

 // How can .Net convert sequence into string? The only way is to return type name
 // which is unreadable System.Linq.Enumerable+WhereSelectEn... 
 offer
   .Where(x => x.PropertyDefinitionId == propertyDefinitionId)
   .Select(x => x.OfferId)
   .ToString()

Join элементов в string

  // Join items into string with "; " delimiter, e.g. "1; 2; 3; 4"
  offerIds.Add(string.Join("; ", offer
    .Where(x => x.PropertyDefinitionId == propertyDefinitionId)
    .Select(x => x.OfferId)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...