为什么Lambda表达式会返回System.Linq.Enumerable + WhereSelectEnumerableIterator`2

时间:2019-02-27 08:13:39

标签: c# .net linq lambda collections

使用lambda表达式返回字符串列表时,我得到以下字符串作为结果:

  

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循环中,offer变量包含期望值。但是,当我使用lambda表达式创建条件时,结果将返回 System.Linq.Enumerable + WhereSelectEnumerableIterator`2

搜索时,我得到一些建议,例如

  1. 将lambda表达式的结果复制到单独的列表中
  2. ToList()用于lambda表达式,然后将其分配给结果变量

以及更多建议。但是没有答案对我有帮助。

有人知道这段代码有什么问题吗?

3 个答案:

答案 0 :(得分:0)

而不是将转换序列转换为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)));

答案 1 :(得分:0)

如果您希望每项优惠都能得到一个结果,请尝试:

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());
}

答案 2 :(得分:0)

在我看来,您希望将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()));
}

现在,对于每个商品,都会将一组OfferId字符串添加到您的offerIds IList