我有Institution
个实体,其中Fund
列表为属性。
我单独列出了允许的资金。
我想选择具有allowedFunds
列表中任何基金的机构,这些机构可以轻松完成。但是当我获得机构时,我希望过滤Funds
列表。
换句话说,我Institution1
Fund1
和Fund2
。 Fund1
也在allowedFunds列表中。我想返回Institution1,Funds
列表只有Fund1。是否可以使用lambda表达式为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; }
}
编辑; 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;
}
答案 0 :(得分:0)
尝试以下内容
from i in Institutes from f1 in i.Funds join f2 in AllowedFunds on f1.Id equals f2.Id select f1