使用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 。
搜索时,我得到一些建议,例如
ToList()
用于lambda表达式,然后将其分配给结果变量以及更多建议。但是没有答案对我有帮助。
有人知道这段代码有什么问题吗?
答案 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