プロパティとしてリストを持つInstitution
エンティティがあります。Fund
許可された資金のリストを別に持っています。
allowedFunds
簡単にできるリストから任意のファンドを保有している機関を選びたい。Funds
しかし、機関を取得するときに、リストもフィルタリングしたいと思います。
言い換えれば、私はInstitution1
とFund1
を持っていFund2
ます。Fund1
allowedFunds リストにもあります。Funds
Fund1 のみを含むリストでInstitution1 を返したいと思います。EF 4.1 のラムダ式を使用して、これに対するクエリを作成することは可能ですか?
// I have allowed funds in a separate list
IEnumerable<Fund> allowedFunds;
public partial class Institution
{
public int Id { get; set; }
public virtual ICollection<Fund> Funds { get; set; }
}
public partial class Fund
{
public int Id { get; set; }
public virtual Institution Institution { get; set; }
}
編集; 大木、質問を編集し、ここに別の説明を加えます。私の 2 番目のコメント (//許可されていない資金を機関から削除する) の下にコードが表示されている場合、それが私がやりたいことです。しかし、そこで研究所セットを返してロジックを追加します。その代わりに、許可されていない資金を削除した後に機関を返したいと思います。以下は私の方法です。ありがとう。
public IEnumerable<Institution> FindInstitutionsForExternalUser(IEnumerable<Fund> allowedFunds)
{
IQueryable<Institution> query = GetObjectSet();
//Institutions which are connected to allowedFunds
if (allowedFunds != null)
{
IEnumerable<int> fundIds = allowedFunds.Select(fund => fund.Id);
query = query.Where(i => i.Funds.Any(o => fundIds.Any(id => id == o.Id))); ;
}
IEnumerable<Institution> list = query.ToList().OrderBy(a => a.Name);
//remove not allowed Funds from institutions
foreach (var institution in list)
{
IEnumerable<Fund> filterdFunds =
institution.Funds.Where(fund => allowedFunds.Any(allowedFund => allowedFund.Id == fund.Id));
institution.Funds = filterdFunds.ToList();
}
return list;
}