次のクラス オブジェクトがあります。
public class VacancyCategory
{
public int ID { get; set; }
public string Text { get; set; }
public IList<VacancySubCategory> SubCategories { get; set; }
}
public class VacancySubCategory
{
public int ID { get; set; }
public string Text { get; set; }
public VacancyCategory Category { get; set; }
public IList<Vacancy> Vacancies { get; set; }
}
public class Vacancy : IBusinessObject
{
public int ID { get; set; }
public string Title { get; set; }
public VacancySubCategory SubCategory { get; set; }
public string Body { get; set; }
public VacancyWorkType WorkType { get; set; }
public string Salary { get; set; }
public DateTime? AppsClosingDate { get; set; }
public bool Active { get; set; }
}
...だから、テストリポジトリで次のようにテストデータを作成しています:
private IList<VacancyCategory> GetVacancyCategoriesWithAllChildCollections()
{
IList<VacancyCategory> vacancyCategories = new List<VacancyCategory>();
int cCounter = 0;
int scCounter = 0;
int vCounter = 0;
for (int i = 1; i <= 3; i++)
{
VacancyCategory vc = new VacancyCategory();
vc.ID = ++cCounter;
vc.Text = "VacancyCategory" + i.ToString();
for (int j = 1; j <= 3; j++)
{
VacancySubCategory vsc = new VacancySubCategory();
vsc.ID = ++scCounter;
vsc.Text = "VacancySubCategory" + scCounter.ToString();
vsc.Category = vc;
for (int k = 1; k <= 2; k++)
{
Vacancy v = new Vacancy();
v.ID = ++vCounter;
v.Title = "Vacancy" + vCounter.ToString();
v.Body = "VacancyBody" + vCounter.ToString();
v.Active = vCounter >= 16 ? false : true;
v.WorkType = this._workTypes.Single(wt => wt.ID == k);
v.Salary = vCounter <= 7 ? "SR " + (vCounter * 1000).ToString() : "";
v.AppsClosingDate = (vCounter >= 3 & vCounter <= 13) ? (new DateTime(2009, 3, vCounter)) : (DateTime?)null;
v.SubCategory = vsc;
if (vsc.Vacancies == null)
vsc.Vacancies = new List<Vacancy>();
vsc.Vacancies.Add(v);
}
if (vc.SubCategories == null)
vc.SubCategories = new List<VacancySubCategory>();
vc.SubCategories.Add(vsc);
}
vacancyCategories.Add(vc);
}
return vacancyCategories;
}
..だから今、私はいくつかの良いテストデータを持っています. オブジェクト ツリー/連鎖オブジェクトは私にとって重要です。
必要に応じて、このツリーから個々のオブジェクト コレクションを返したいと思います。たとえば、ツリー全体が必要な場合は、すべての子オブジェクトを含む VacancyCategory リストを返すだけで済みます。すばらしいです。しかし、今は VacancySubCaregory アイテム (9 つすべて) だけを返したいと思います。これは、テスト リポジトリへのパブリック メソッドになります。
public IQueryable<VacancySubCategory> GetVacancySubCategories()
{
throw new NotImplementedException("write gen code");
}
.. 明らかに例外なく。GetVacancyCategoriesWithAllChildCollections メソッドの結果を含む _categories というメンバー フィールドがあります。だから私は次のようなものを試してきました
this._categories.Select( ......
..しかし、VacancySubCategory オブジェクトのリストを返せないようです。私は常にルート コレクション (つまり、VacancyCategory オブジェクトの結果セット) を選択しているようです。私は何を間違っていますか?シンプルだと思います...しかし、それは私を夢中にさせます!
編集
サンクスマット。
あなたの提案は私をこれに導きました:
public IQueryable<VacancySubCategory> GetVacancySubCategories()
{
return this._categories.SelectMany(c => c.SubCategories).AsQueryable<VacancySubCategory>();
}
..これはうまくいきます。あなたはチャンピオンです