0

我有两张桌子:A & B

B { B1:字段 1,B2:字段 2,...}

A { 孩子:B 的列表,A1:Field1,A2:Field2,}

我想检索具有相关“B”实体的“A”实体,如下所示:

DataContext.A.Select(a => new MySubset(A1 = a.A1, Children = a.Children.Select(b => b.B1).ToList () );

但是 EF 无法将 ToList 转换为 SQL,因此我必须在查询中为每个实例调用 ToList() 以产生额外的网络调用。

我怎样才能避免这种情况?

先感谢您。

4

2 回答 2

0

我会在 MySubset 的构造函数中使用 IEnumerable 而不是 List。

或者:不是通过 .ToList() 创建列表,而是通过new List<T>(a.Children.Select(b => b.B1))

于 2010-05-01T15:38:08.713 回答
0

您可以使用.Include语句来进行预加载:

http://msdn.microsoft.com/en-us/library/bb896272.aspx

解释

假设您使用的是 VS2010 并且启用了延迟加载:

当您最初加载 A 时,显然有一组 B 正在等待您离开 A,但实际上并非如此,它不是 List<>,它是一个知道如何在您请求 B 时提供 B 的对象。只有当您访问此集合时,EF 才会往返于数据库以获取它。

但是如果你使用 .Include() 你可以请求它在获取 A 的同时获取 B。

于 2010-05-01T16:33:27.460 回答