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>ことがないという問題がありますが、代わりにこのエラーが発生します。空のフィールドに対してパラメーターのないメソッドを呼び出す場合、またはメソッドにパラメーターがない場合にもスローされる可能性があります。

まず、nHibnerateLINQバージョンを更新してみてください。多くの改善がありました。それが失敗した場合は、これを試して(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 に答える