1

プロパティとしてリストを持つInstitutionエンティティがあります。Fund

許可された資金のリストを別に持っています。

allowedFunds簡単にできるリストから任意のファンドを保有している機関を選びたい。Fundsしかし、機関を取得するときに、リストもフィルタリングしたいと思います。

言い換えれば、私はInstitution1Fund1を持っていFund2ます。Fund1allowedFunds リストにもあります。FundsFund1 のみを含むリストで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; 
    }
4

1 に答える 1

0

次のようなものを試してください

from i in Institutes from f1 in i.Funds join f2 in AllowedFunds on f1.Id equals f2.Id select f1
于 2012-04-10T04:56:32.230 に答える