假设我创建了一个查询结果
var query = from a in tblXYZ join c in tblABC on a.id = b.id select new {a.x, b.x};
将其传递到视图中的最佳方法是什么?我应该创建一个新对象并将查询结果复制到其中吗?
假设我创建了一个查询结果
var query = from a in tblXYZ join c in tblABC on a.id = b.id select new {a.x, b.x};
将其传递到视图中的最佳方法是什么?我应该创建一个新对象并将查询结果复制到其中吗?
我认为它几乎总是创建特定于视图的模型的首选机制。我还将支持@Marc 的建议,即在控制器中具体化查询并将视图传递给列表。如果您对查询有疑问,则更容易诊断查询是否在控制器而不是视图中执行。堆栈跟踪在这一点上实际上很有用。
如前所述,这将是一个匿名类型,可以访问(在 4.0 中更容易通过dynamic
),但这样做很难看。它目前在数据访问发生时也存在歧义,因为 LINQ 被延迟,这意味着如果您将该查询传递到视图中,您实际上是在视图期间(而不是在控制器内部)进行数据访问。
我很想创建一个类来表示数据(本质上是一个视图模型),并返回一个实体列表(不是延迟查询)。
将查询放入存储库。在控制器中,将查询结果传递给该视图的指定模型视图。
Model-View - 用于将数据从控制器传输到视图的指定类。