代码之家  ›  专栏  ›  技术社区  ›  Samuel Goldenbaum

Linq到对象错误:索引超出范围。必须是非负数并且小于集合的大小。参数名称:索引

  •  1
  • Samuel Goldenbaum  · 技术社区  · 16 年前

    在尝试从linq查询返回新对象列表时,出现以下错误。我期待返回一个精简实体中使用的选择框,只需要和id和名称。

    索引超出范围。必须是非负数并且小于集合的大小。

    myViewModel.Regions = _regionRepository
                    .OrderBy(x => x.Name)
                    .Select(x => new RegionForSelect {Id = x.Id.ToString(), Name = x.Name})
                    .ToList();
    
     public class MyViewModel
    {
        public IList<RegionForSelect> Regions { get; set; }
    }
    
    public class RegionForSelect
    {
        public string Id;
        public string Name;
    } 
    

    不知道我哪里出错了。

    谢谢你给我小费。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Nick Craver    16 年前

    集合中有数据吗?LINQ到NHibernate有一个问题,不会导致空 List<T>

    第一, ,有很多改进。如果失败了,那么尝试这样做(因为您仍然在内存中使用Linq to Objects)将nHibernate提供程序从图片中删除:

    myViewModel.Regions = _regionRepository.All()
                .OrderBy(x => x.Name)
                .Select(x => new RegionForSelect {Id = x.Id.ToString(), Name = x.Name})
                .ToList();
    

    如果仍然失败,请更换 .All() 具有 .ToList() ,这在性能或内存使用方面并不理想,但可能是您的唯一选择。这种东西应该 只是工作