我有一组对象,我从几个查询中获得并将它们组合起来。
这是 PSEUDO 代码中的示例:
List<myObj> list = new List<myObj>();
list.add(myContext.SqlQuery("SELECT * FROM CATS WHERE CONTAINS("DOGS" NEAR "CATS", 5, 3);
list.add(myContext.SqlQuery("SELECT * FROM CATS WHERE CONTAINS("FISH" NEAR "WATER", 2, 1);
list.add(myContext.SqlQuery("SELECT * FROM CATS WHERE NAME = "Fluffkins");
我很确定我对此无能为力.Include()
,但如果有一种我感兴趣的方法。
我想列举一下,看看一个特定的属性。我可以做一个 foreach 并检查myObj.prop1.prop2
每个对象,但这将导致每个对象的 sql 查询。
foreach(var x in myEnumerableCollection)
{
var y = x.prop1.prop2 // Not iqueryable so I couldn't include, this means it does a query every time
}
对此的标准解决方案是做一个,.Include()
但是由于我建立对象集合的方式,我无法做到这一点——它来自多个内联 SQL 查询。
快速而肮脏的方法可能是自己构建一个 SQL 查询,例如:
SELECT * from myObjType inner join prop1 on ... inner join prop2 on ...
但是,将其作为实体对象进行跟踪可能会有问题,并且与使用实体对象相比,内联 sql 也不是很好。
所以我想我想知道我是否可以以某种方式.Include
对我执行一个或类似的操作,IEnumerable<T>
以便让 EF 在幕后填充单个查询中的属性,以便 foreach 更快地评估。
有任何想法吗?
编辑:问题.SqlQuery<T>
在于它不会返回IQueryable<T>
,因此排除了任何链接和惰性评估。