如何动态地包含(或不包含)关系

时间:2013-01-31 20:28:57

标签: linq entity-framework

我是EF5和LINQ的新手,并在以下方面苦苦挣扎。

我正在急切的负载情况下工作,我想知道如何最好地编写方法来支持以下内容。

实体A与其他3个城市有关系。

我想要一个返回Listist的方法(没问题) 但我也希望该方法有3个参数,表明我是否要包含其他3个相关实体。

所以,如果所有这三个都被包括在内,那就有效了。

        var AA = from e in context.A
        .Include( "Bs" )
         .Include( "Cs" )
         .Include( "Ds" )
                    where e.......
                    select e;

如何根据我的方法参数编写它以允许包含或不存在?

1 个答案:

答案 0 :(得分:0)

将三个参数bool includeBsbool includeCsbool includeDs传递到方法中,然后使用:

DbQuery<A> query = context.A;
if (includeBs)
    query = query.Include("Bs");
if (includeCs)
    query = query.Include("Cs");
if (includeDs)
    query = query.Include("Ds");

var AA = from e in query
         where e.......
         select e;

作为旁注:对于EF 5,您应该有一个强类型版本的Include可用,它使用lambda表达式而不是字符串作为参数,如Include(a => a.Bs)。当您将上面的DbQuery<A>替换为IQueryable<A>时,您也可以使用它。