1

尝试从 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;
} 

不知道我哪里出错了。

任何提示表示赞赏。

4

1 回答 1

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 和我前段时间分道扬镳的原因 :)

于 2010-02-20T12:16:27.807 回答