所以我有一个查询来搜索不同的项目,但是我只想要它们的Id,所以我使用了一个投影来只返回Id,而不返回项目的其他元素。但是从ObjectId
转换到.ToString()
,然后再转换到.ToList()
,返回的是List<char>
,而不是List<string>
var items = await this.ItemAppService.GetAllAsync(expression,
x => new
{
Ids = x.Id.ToString().ToList(),
});
var Ids = items.SelectMany(x => x.Ids.Select(x => x)).ToList();
我希望了解为什么返回List<Char>
以及如何将其转换为List<String>
2条答案
按热度按时间3b6akqbq1#
.ToString().ToList()
返回一个新的是的,因为
string
是IEnumerable<char>
(一堆可以被 * 枚举 * 的 * 字符 *)。ToList
是所有IEnumerable<T>
上的扩展方法,它返回List<T>
。因此,匿名对象中的
Ids
属性已经是List<char>
:然后再对它做一些移动,但不做任何有意义的改变。
x.Ids.Select(x => x)
返回一个与x.Ids
内容相同的Innumerable<char>
。SelectMany
将每个匿名对象中的所有IEnumerable<char>
加起来成为一个大的IEnumerable<char>
,然后将其转换为一个列表。我不知道你为什么要在这里使用匿名对象。如果你只想要一个包含所有ID的
List<string>
,那么就这样做:jfewjypa2#
第一个ToList是不必要的,您需要字符串,而通过ToList()调用,您将字符串转换为字符数组,因此代码应重写为: