私がこれを処理する方法は、いくつかの拡張メソッド(フィルタ)を使用することです。私はこれを実装したプロジェクトからいくつかのサンプルコードを書きました。私がParentPartnerオブジェクトとSubPartnersリストを設定している行を具体的に見てください。
public IQueryable<Partner> GetPartners()
{
return from p in db.Partners
select new Partner
{
PartnerId = p.PartnerId,
CompanyName = p.CompanyName,
Address1 = p.Address1,
Address2 = p.Address2,
Website = p.Website,
City = p.City,
State = p.State,
County = p.County,
Country = p.Country,
Zip = p.Zip,
ParentPartner = GetPartners().WithPartnerId(p.ParentPartnerId).ToList().SingleOrDefault(),
SubPartners = GetPartners().WithParentPartnerId(p.PartnerId).ToList()
};
}
public static IQueryable<Partner> WithPartnerId(this IQueryable<Partner> qry, int? partnerId)
{
return from t in qry
where t.PartnerId == partnerId
select t;
}
public static IQueryable<Partner> WithParentPartnerId(this IQueryable<Partner> qry, int? parentPartnerId)
{
return from p in qry
where p.ParentPartner.PartnerId == parentPartnerId
select p;
}
これは素晴らしいアイデアだと思いますが、これを実装しようとするとエラーが発生します。 "WithPartnerId"拡張メソッドには、SQLへの変換がサポートされていないと言われています。何か案は? –