考虑使用 ViewModel
您需要使用 ViewModel 来组合所有这些不同的结果并将该模型传递给 View:
public class ExampleViewModel
{
// Example collections for each of your types
public IEnumerable<Something> CollectionA { get; set; }
public IEnumerable<Something> CollectionB { get; set; }
public IEnumerable<Something> CollectionC { get; set; }
}
然后只需使用类似以下代码的代码来执行您的特定查询,并使用这些查询的结果来构建您的模型,然后将其传递给视图:
// Build the model
var model = new ExampleViewModel(){
// You'll likely want a .ToList() after these to ensure things work as expected
CollectionA = db.thisdatabase.Select(x => x.ts),
CollectionB = db.thisdatabase.Select(x => x.ts),
CollectionC = db.thisdatabase.Select(x => x.ts),
};
// Pass it to your View
return View(model);
注意:这假设您实际上并没有用每个查询查询同一个确切的表。如果是这种情况,那么使用您的每个属性拉回一个集合然后将您的各个属性集合分配给模型可能会更有效(而不是执行多个可能是冗余的查询。
然后在视图中,您可以按预期引用底层属性集合并遍历它们或执行任何其他类型的操作:
@model YourProject.ViewModels.ExampleViewModel
@foreach (var item in Model.CollectionA) { ... }
@foreach (var item in Model.CollectionB) { ... }
@foreach (var item in Model.CollectionC) { ... }
更复杂的场景
如果您不想简单地访问数据库中的单个列,而是访问多个列,您可能希望创建另一个模型/类来映射您的属性,然后将这些属性的实例存储在您的 ViewModel 中。
让我们看看你的例子,看看它是如何工作的。所以您目前正在寻找存储ts、ls 和d 属性,所以让我们创建一个类来存储它们:
public class Example
{
public string Ts { get; set; }
public string Ls { get; set; }
public string D { get; set; }
}
现在,当您执行查询时,只需获取所有这些并将它们映射到 Select() 调用中:
// This will now be an IEnumerable<Example>
var models = db.thisdatabase.Select(x => new Example()
{
Ts = x.ts,
Ls = x.ls,
D = d
});
如果这就是您所需要的,您现在可以将它直接传递给您的视图:
// If you did this, you'd need to adjust your @model declaration
return View(model);
或者,如果您需要为不同的表构建不同的模型,然后将所有这些集合组合成类似于原始示例的 ViewModel,您可以执行其中的多个:
var model = new ExampleViewModel(){
CollectionA = db.thisdatabase.Select(x => new Example(x)),
CollectionB = db.othertable.Select(x => new OtherExample(x)),
CollectionC = db.yetanother.Select(x => new LastExample(x))
};
其他存储形式
您可以根据需要考虑其他一些方法,例如使用ViewBag 集合。 ViewBag 是一个动态集合,可让您轻松存储和访问 View 中的对象:
ViewBag.A = db.thisdatabase.Select(x => x.ts),
ViewBag.B = db.thisdatabase.Select(x => x.ts),
ViewBag.C = db.thisdatabase.Select(x => x.ts),
return View();
这将基本上以相同的方式工作,但不是在您的视图中引用@Model,而是使用@ViewBag。还值得注意的是,这也可以与实际模型结合使用。
还有其他方法,例如使用 ViewData 或 Session 集合,但您真的应该使用模型。它更符合实际的 MVC 模式,如果你习惯了它,它应该会让你的生活更轻松。