Entity framework 4 实体框架-以编程方式将包含添加到ObjectQuery

Entity framework 4 实体框架-以编程方式将包含添加到ObjectQuery,entity-framework-4,Entity Framework 4,我有一个实体框架模型,其中我有一个具有以下关系的用户: User 1-* Test Test 1-1 Course Test 1-* TestEvent 每个测试都有以下关系: User 1-* Test Test 1-1 Course Test 1-* TestEvent 我有一个返回用户的服务,在我的应用程序中的不同点上,我想急切地获取各种关系。我正在获取当前的所有关系: var result = (from appUser in context.AppUsers.Include("

我有一个实体框架模型,其中我有一个具有以下关系的用户:

User 1-* Test
Test 1-1 Course
Test 1-* TestEvent
每个测试都有以下关系:

User 1-* Test
Test 1-1 Course
Test 1-* TestEvent
我有一个返回用户的服务,在我的应用程序中的不同点上,我想急切地获取各种关系。我正在获取当前的所有关系:

var result = (from appUser in context.AppUsers.Include("Tests.Course")
    .Include("Tests.TestEvents")
    where appUser.Login.ToLower() == loginName.ToLower() &&
    appUser.IsDeleted == false
    select appUser).FirstOrDefault();

我不想总是返回链接到测试或测试事件的课程。如何构建ObjectQuery并根据需要动态添加Include语句,而不是一系列if-else语句。

好吧,既然
Include
返回
IQueryable
(LINQ chaineable),我将使用一种简单的扩展方法:

public static IQueryable<T> WithIncludes<T>(this IQueryable<T> source, string[] associations)
{
   var query = (ObjectQuery<T>)source;

   foreach (var assoc in associations)
   {
      query = query.Include(assoc);
   }
}
为了在include的神奇字符串特性中获得一些强类型,我为所有关联提供了专门的枚举,因此我将其中的[]传递给include,并将枚举转换为字符串include

问题是,您的方法应该定义需要包含的内容。因此,在该方法中要做的第一件事是声明所需的关联,然后将其传递给扩展方法


这就是你想要的吗?

谢谢你的建议-我会试试看,然后买回来back@GargJoynes-没问题,如果您有任何问题,请告诉我。@RPM1984-抱歉耽搁了。这个解决方案非常完美,非常感谢。我还使用来自的解决方案以同样的方式处理Where子句NICE,这将使我的项目受益匪浅@MvcCmsJon-请记住,如果您的用户使用的是新版本的EF,则会出现强类型的
Include
,因此不再需要这样做。