【发布时间】:2018-10-19 19:56:39
【问题描述】:
我有一个 linq 查询(在 Entity Framework Core 中),它连接两个 sql server 表,在 where 子句中过滤结果,然后从结果中选择一组列。
var resultsObj = (from rd in _db.ResData
join ra in _db.ResAvailability on rd.RecNo equals ra.RecNoDate
where ra.TotalPrice < Int32.Parse(resDeals.priceHighEnd) && ra.TotalPrice > Int32.Parse(resDeals.priceLowEnd)
select new
{
Name = rd.Name,
ImageUrl = rd.ImageUrl,
ResortDetails = rd.ResortDetails,
CheckIn = ra.CheckIn,
Address = rd.Address,
TotalPrice = ra.TotalPrice
});
ViewBag.resultSet = resultsObj;
我创建了一个 viewmodel 类来存储属性一行查询结果和另一个 viewmodel 类,其中包含一个 List 对象来存储另一个 viewmodel 的所有实例,本质上用作从返回的所有行的集合查询:
public class ResortDataJoinObj
{
public ResortData ResData { get; set; }
public ResortAvailability ResAvail { get; set; }
}
public class ResortDealResultsObject
{
public List<ResortDataJoinObj> resultsList { get; set; }
}
创建列表后,我需要将其导入视图页面,以便可以将查询结果存储在表中。我之前已经完成了获取查询结果的这个过程,除了存储过程,我能够遍历读取器对象并根据需要存储返回的行数据。我知道使用 Viewmodels 将数据从控制器传递到视图是标准做法,但我仍然是使用 linq 查询的新手,所以我不确定如何实际提取从 linq 查询结果返回的数据并绑定它到视图模型。
如何从 linq 查询结果中提取数据并将其存储在 viewmodel 类中?
【问题讨论】:
-
您需要控制器来处理它,并且您需要在视图中(在顶部)声明一个@model。见:stackoverflow.com/questions/24469192/mvc-viewmodel-example
-
@AussieJoe 我查看了该帖子中的答案,但它似乎并没有真正解决这里的问题。在那个答案中,提供的代码只是将查询返回的属性分配给 viewmodel 对象,但只有一次。它不会遍历整个集合以提取每个“行”然后进行分配。您是否不必遍历整个集合以从每个返回的行中提取数据。
-
您需要在视图中使用“模型”。重新仔细查看示例并注意 HTML 中的 foreach 循环。据说,您正在尝试重新发明轮子。这是 MVC,它已经为你处理好了。就是这么简单:)
标签: c# asp.net sql-server linq asp.net-core