Entity framework 4 实体框架4 Linq帮助-从多个表中提取数据
我不确定这是如何完成的,我已经设置了我的.edmx,以便导航属性与表上的外键关系相匹配。不确定我是否仍然需要执行联接,或者EF是否会自动通过导航属性让我访问相关的表数据 我需要做的是基于ContentView获取所有ContentSection及其关联的ContentItems,并通过DiversionProgram.CrimeNumber进行过滤 我想返回IEnumerable,对于每个ContentSection,它应该可以通过导航属性ContentItems访问其ContentItems 谢谢类似于:Entity framework 4 实体框架4 Linq帮助-从多个表中提取数据,entity-framework-4,linq-to-entities,Entity Framework 4,Linq To Entities,我不确定这是如何完成的,我已经设置了我的.edmx,以便导航属性与表上的外键关系相匹配。不确定我是否仍然需要执行联接,或者EF是否会自动通过导航属性让我访问相关的表数据 我需要做的是基于ContentView获取所有ContentSection及其关联的ContentItems,并通过DiversionProgram.CrimeNumber进行过滤 我想返回IEnumerable,对于每个ContentSection,它应该可以通过导航属性ContentItems访问其ContentItems
using(Entities context = new Entities())
{
IEnumerable<ContentSection> enumerator = context.ContentSections
.Include("ContentItems")
.Where<ContentSection>(cs => cs.ContentView.ContentViewID == someID && cs.ContentItems.Where<ContentItem>(ci => ci.DiversionProgram.CrimeNumber == someCrimeNumber))
.AsEnumerable<ContentSection>
}
使用(实体上下文=新实体()
{
IEnumerable枚举数=context.ContentSections
.包括(“内容项”)
.Where(cs=>cs.ContentView.ContentViewID==someID&&cs.ContentItems.Where(ci=>ci.DiversionProgram.CrimeNumber==someCrimeNumber))
.可计算
}
我翻译过
基于ContentView
ascs.ContentView.ContentViewID==someID
这将为您提供给定ContentView的所有ContentSection。并解释
已由DiversionProgram.CrimeNumber过滤
ascs.ContentItems.Where(ci=>ci.DiversionProgram.CrimeNumber==someCrimeNumber)
这将为您提供所有具有特定CrimeNumber的ContentItems
或者你指的是基于/过滤的其他内容。可能是OrderBy,或者所有那些ContentSection,其中的任何ContentItems都会有特定的CrimeNumber?您可以急于加载以获取所有关联的记录,但是当您想要开始筛选/排序时,不要麻烦使用包含
只要用匿名类型做一个投影,EF就会知道它需要做什么。这有点毛茸茸的,但会管用的。如果事情变得太复杂,咬紧牙关,进行一次大爆发
现在,有了这个警告,类似这样的事情(从我的头顶上):
如果您使用CTP5,您可以做一些非常独特的事情,它看起来如下所示:
var context = new YourEntitiesContext();
var query = context.ContentView.Include(cs => cs.ContentSections
.Select(ci => ci.ContentItems
.Select(dp => dp.DiversionProgram)
.Where(dp.CrimeNumber == crimeNumber)))
.Where(cv => cv.ContentViewID == contentViewID).FirtsOrDefault();
您可以从studentManagementEntities.StudentRegistrations中的t1了解有关CTP5的更多信息,以及如何在数据库优先方案中使用它
加入学生管理实体。学生分数
在t1.StudentID等于t2.StudentID
选择新的
{
t1.选定的列名,
t2.选定的列名
};
您是否正在建立犯罪网络?我能参加吗当然很容易加入。。。只要找到你当地的警察,给他一记耳光,你就会立刻成为网络的一部分!使用示例时,LOLgetting错误无法将运算符“&&”应用于bool和IEnumerable类型的操作数。我明白了。如果你使用任何一个,而不是在你有更多机会的地方。但结果会有所不同。但是试着看看它是否满足你的需要。如果没有,回到这里,我们会进一步考虑。这是CTP5独有的吗?这是基本的LINQ实体。而且在投影时不需要包含……是的,在EF4 CTP5.ahh之前,不能在LINQ to实体中使用类型化包含。我很困惑,因为您没有指定代码的哪一部分是“唯一的”。我的错。
var context = new YourEntitiesContext();
var query = context.ContentView.Include(cs => cs.ContentSections
.Select(ci => ci.ContentItems
.Select(dp => dp.DiversionProgram)
.Where(dp.CrimeNumber == crimeNumber)))
.Where(cv => cv.ContentViewID == contentViewID).FirtsOrDefault();