尝试从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;
}
不知道我在哪里错了。
任何提示赞赏。
答案 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和我前段时间采用了不同的方式:)