linq .ToString().ToList()返回新列表< char>

uqjltbpv  于 2023-01-10  发布在  其他
关注(0)|答案(2)|浏览(195)

所以我有一个查询来搜索不同的项目,但是我只想要它们的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>

3b6akqbq

3b6akqbq1#

.ToString().ToList()返回一个新的
是的,因为stringIEnumerable<char>(一堆可以被 * 枚举 * 的 * 字符 *)。ToList是所有IEnumerable<T>上的扩展方法,它返回List<T>
因此,匿名对象中的Ids属性已经是List<char>

x => new
{
   // this "Ids" is already a List<char>
   Ids = x.Id.ToString().ToList(),
});

然后再对它做一些移动,但不做任何有意义的改变。x.Ids.Select(x => x)返回一个与x.Ids内容相同的Innumerable<char>SelectMany将每个匿名对象中的所有IEnumerable<char>加起来成为一个大的IEnumerable<char>,然后将其转换为一个列表。
我不知道你为什么要在这里使用匿名对象。如果你只想要一个包含所有ID的List<string>,那么就这样做:

var ids = await this.ItemAppService.GetAllAsync(
              expression,
              // assuming x.Id is not already a string
              x => x.Id.ToString()
          ).ToList();
jfewjypa

jfewjypa2#

第一个ToList是不必要的,您需要字符串,而通过ToList()调用,您将字符串转换为字符数组,因此代码应重写为:

var items = await this.ItemAppService.GetAllAsync(expression,
    x => new
    {
        Id = x.Id.ToString(),
    });
var ids = items.Select(x => x.Id).ToList();

相关问题