2010-02-20 38 views
1

嘗試從linq查詢返回新對象的列表時出現以下錯誤。我正在尋找返回一個精簡的實體用於選擇框,只需要和ID和名稱。Linq到對象錯誤:索引超出範圍。必須是非負數且小於集合的大小。參數名稱:索引

指數超出範圍。必須是非負數且小於集合的大小。 參數名稱: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

LINQ to Objects或LINQ to NHibernate?標題說一個,標籤說另一個... – 2010-02-20 11:18:48

回答

2

集合中是否有任何數據? LINQ-to-NHibernate有一個問題,有時候不會產生空的List<T>,而是這個錯誤。在針對空字段調用任何無參數方法或者該方法沒有參數時也可以引發它。

首先,嘗試更新您的nHibnerate LINQ版本,已經有很多改進。如果失敗,那麼試試這個(因爲你在內存工作仍使用LINQ到對象)取NHibernate的提供出來的畫面:

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

如果還是失敗,與.ToList()取代.All(),這在性能或內存使用方面並不理想,但可能是您唯一的選擇。這種應該只是工作的東西也是爲什麼nHibernate和我前段時間走了我們各自的方式:)

+0

是Linq版本 – Chev 2010-03-01 07:48:23

+1

Chev,NHibernate.Linq版本最終爲您工作?謝謝! – 2010-08-02 14:14:28

相關問題