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
,因此不再需要这样做。