实体框架:Generic得到Icollection

时间:2014-10-21 10:53:53

标签: c# entity-framework

我正在使用可返回特定实体集的通用方法。

public virtual IList<T> GetList(Func<T, bool> where,
    params Expression<Func<T, object>>[] navigationProperties)
{
    List<T> list;
    using (var context = new eTRdataEntities())
    {
        IQueryable<T> dbQuery = context.Set<T>();

        //Apply eager loading
        foreach (Expression<Func<T, object>> navigationProperty in navigationProperties)
            dbQuery = dbQuery.Include<T, object>(navigationProperty);

        list = dbQuery
            .AsNoTracking()
            .Where(where)
            .ToList<T>();
    }
    return list;
}

我有三个名为Domain,Term和Word的类。该域包含多个术语,术语可以包含许多Word实例。因此,它们被定义为Icollections

e.g。

public virtual ICollection<Terms> Terms{ get; set; }

我已经使用了以下命令:

IGenericDataService<Domain> domain_= new DataManagementService<Domain>();
IList<Domain> tempDom = domain_.GetList(o => o.OID.Equals("ABC"), d => d.Term);

这将返回域及其所有术语,但不会返回单词。

我需要知道的是如何调用此方法并指导它获取Term和Word(急切加载)。问题出现了,因为Domain有一系列术语,我不能称之为,

IList<Domain> tempDom = domain_.GetList(o => o.OID.Equals("ABC"), d => d.Term.Word);

请建议,

非常感谢

1 个答案:

答案 0 :(得分:2)

带有嵌套集合的

Include

IList<Domain> tempDom = domain_.GetList(o => o.OID.Equals("ABC"), 
                                        d => d.Term.Select(t => Words));

另请参阅:Loading Related Entities

顺便说一句,我会将Func where参数更改为Expression<Func>>