我有两张桌子:A& B
B { B1:Field1, B2:Field2, ... }
一个 { 儿童: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(),从而产生额外的网络调用。
我该如何避免这种情况?
提前谢谢。
答案 0 :(得分:0)
我会在MySubset的构造函数中使用IEnumerable而不是List。
或者:创建列表不是通过.ToList(),而是通过new List<T>(a.Children.Select(b => b.B1))
答案 1 :(得分:0)
您可以使用.Include
语句进行预先加载:
http://msdn.microsoft.com/en-us/library/bb896272.aspx
<强>解释强>
假设您使用的是VS2010且启用了延迟加载:
当你最初加载A时,有一个B的集合显然在等你A,但它不是真的,它不是List&lt;&gt;,它是一个知道如何在你要求时提供B的对象。只有当您访问此集合时,EF才会执行到数据库的往返以获取它。
但是如果你使用.Include(),你可以请求它在获取A的同时获取B.