1

我正在使用Entity Framework 4.1开发MVC3应用程序。我做了LINQ查询,并将其返回为IEnumerable<T>。但是,在控制器中,我必须使用Include(other entity),就像ObjectSet一样,所以我可以在视图中显示其他实体值(与正在查询的实体值相关联)。我试图从IEnumerable<T>ObjectSet<T>,但它抛出异常。有没有什么办法可以从IEnumerable得到ObjectSet,或者在IEnumerable中包含实体?
在此先感谢。IEnumerable <> to ObjectSet <>,原因:INCLUDE

回答

2

如果你的背景是还活着(如果你还没有使用的左),如果你没有做过.ToList()你应该能够转换为ObjectQuery<T>

一个更安全的做法是在其中IQueryable<T>检查是否可查询是一个ObjectQuery<T>并且如果是这样投射到ObjectQuery<T>和返回结果.INCLUDE()否则返回所述输入查询使用的扩展方法。

+0

扩大这一点,你可以返回是有ap你使用IEnumerable的关键原因?如果您将IQueryable返回给您的控制器,则可以使用IQueryable Include –

+0

如果我使用IQueryable,则会得到“实体或复杂类型无法在LINQ to Entities查询中构建。” – dodjavola

+0

有关详细信息,请参阅编辑。 –

0

将它转换为IEnumerable后,它将与数据源断开连接。

您应该在DAL中包含相关实体,同时它仍然是IQueryable或IObjectQuery,然后将完整结果作为IEnumerable返回。

否则,您将会对数据库执行额外的操作。

+0

我试过了,但仍然空白字段:( – dodjavola

+0

你看到实体在他们离开Dal之前被填充,它们在传输到控制器时是否丢失? – Slicksim

+0

当我直接在ObjectSet上使用查询时,它甚至可以工作但是当我在最后一句中提到的查询中使用查询时,它没有。当我在IEnumerable上使用查询时(因为查询),它会丢失... – dodjavola

相关问题