0


0

PersonSummaryクラスに2つのデータベーステーブルPersonとAddressのプロパティ(列)(Personの外部キーを使用)を組み合わせたもので、PersonSummaryにFirst Name、State、およびZipがあるとします。

PersonSummaryの作成は、(person、address ⇒ new PersonSummary \ {person、address})を使用してselect節に入れることができます。

私のデータアクセス層はPersonSummaryの知識がないので、より高いレベルでselect節を追加し、from、whereなどを構築したいだけです。 より低いレベルでは、異なる基準に基づいて個人と住所から行を選択します。 GetFemales()やGetPeopleInAState()のようなメソッドがあります。

これを行う方法についての推奨事項はありますか? 私のデータアクセス関数は式を返すべきであり、より高水準のメソッドはそれにSelect節を付けるだけですか?

署名/返品タイプ

2 回答


1


IQueryableに拡張子を追加するだけです。

パブリックスタティックIQueryable Famales(このエントリをIQueryableにする) }

パブリックスタティックIQueryable LivingInState(このエントリをIQueryable、状態の状態){エントリを返します。Where(p => p.State == state); }

public static IQueryable PeopleWithAddress(このエントリをIQueryableにする){return entry.Where(p => p.Address!= null);} }

// Use like this
var marriedFemales = GetPersonsQuery()。Females()。ここで、(f => f.IsMarried)var femaleVictorians = GetPersonsQuery()。Females()。LivingInState(State.Victoria)var femaleVictorians = GetPersonsQuery()。PeopleWithAddress().Females() (x => x.IsMarried)。(x => new {x.LastName、x.Address})を選択します。


0


LINQが使用する基本的な拡張方法を使用しているときは、ほとんど何でもやりたいことができます。

データ層がIQueryable情報を返す限り、あなたは言うことができます

var withSummary = db.GetFemales().Select(p => new PersonSummary(p、p.Address));

LINQ to SQLまたはEFを使用している場合は、すべてのデータが単一のクエリで取得されます。 しかし、あなたのLINQプロバイダがそれほど進んでいない場合は、試してみることができます。

var withSummary = db.GetFemales()。AsEnumerable()。選択(p => new PersonSummary(p、p.Address));

しかし、それはあなたにどういうわけかアドレスを事前にロードする(または遅延ロードする)ことを要求します。