1

我有具有列表作为属性Institution的实体。Fund

我有一个单独的允许资金清单。

我想从allowedFunds可以轻松完成的列表中选择拥有任何基金的机构。但是,当我得到机构时,我希望Funds列表也被过滤。

换句话说,我有Institution1withFund1Fund2Fund1也在 allowedFunds 列表中。我想用Funds只有 Fund1 的列表返回机构 1。是否可以使用 EF 4.1 的 lambda 表达式为此编写查询?

    // 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; }
    }

编辑; Oki,问题已编辑,这里还有另一种解释。如果您在我的第二条评论下方看到代码(//从机构中删除不允许的资金),这就是我想要做的。但在那里我返回研究所设置并添加逻辑。而不是这样做,我想在删除不允许的资金后返回机构。以下是我的方法。谢谢。

    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 回答