Linq to objects错误:索引超出范围。必须是非负数且小于集合的大小。参数名称:index

时间:2010-02-20 10:58:48

标签: linq linq-to-nhibernate

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

指数超出范围。必须是非负数且小于集合的大小。 参数名称:index

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 个答案:

答案 0 :(得分:2)

集合中是否有任何数据? LINQ-to-NHibernate有一个问题,有时不会导致空List<T>,而是出现此错误。当针对空字段调用任何无参数方法时,或者如果方法没有参数时,也可以抛出它。

首先,尝试更新你的nHibnerate LINQ版本,有很多改进。如果失败了,那么尝试这个(因为你在内存中使用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(),这在性能或内存使用方面并不理想,但可能是您唯一的选择。这种应该正常工作的东西也是为什么nHibernate和我前段时间采用了不同的方式:)