Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将数据从linq查询发送到查看页面_C#_Asp.net_Sql Server_Entity Framework_Asp.net Core Mvc - Fatal编程技术网

C# 如何将数据从linq查询发送到查看页面

C# 如何将数据从linq查询发送到查看页面,c#,asp.net,sql-server,entity-framework,asp.net-core-mvc,C#,Asp.net,Sql Server,Entity Framework,Asp.net Core Mvc,我有两个数据库表,它们由其中一个表中的属性链接。这些表在ASP.NET核心MVC应用程序中分别表示为模型。在控制器操作中,我有一个linq查询,它对两个表执行联接,并从联接结果中选择一组列。我试图将此结果集发送到视图页面,以便数据可以显示在分页表中,但我不确定应该如何具体执行此操作 在过去,当使用ASP.NETMVC(而不是core)时,我能够执行存储过程,这些存储过程在控制器操作中返回结果集,迭代结果集,用数据建立列表,然后将列表存储在视图中可以访问的viewbag中。我曾尝试将EntityQ

我有两个数据库表,它们由其中一个表中的属性链接。这些表在ASP.NET核心MVC应用程序中分别表示为模型。在控制器操作中,我有一个linq查询,它对两个表执行联接,并从联接结果中选择一组列。我试图将此结果集发送到视图页面,以便数据可以显示在分页表中,但我不确定应该如何具体执行此操作

在过去,当使用ASP.NETMVC(而不是core)时,我能够执行存储过程,这些存储过程在控制器操作中返回结果集,迭代结果集,用数据建立列表,然后将列表存储在视图中可以访问的viewbag中。我曾尝试将EntityQueryable对象直接存储在viewbag中,但出现了一个错误,我不确定如何遍历它

将linq查询返回的数据发送到查看页面的最佳方式是什么?

控制器动作代码:

 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
                                  }).Take(10);
                ViewBag.resultSet = resultsObj;
var resultsObj=(来自_db.ResData中的rd
将ra加入rd.RecNo上的_db.ResAvailability等于ra.RecNoDate
其中ra.TotalPriceInt32.Parse(resDeals.priceLowEnd)
选择新的
{
Name=rd.Name,
ImageUrl=rd.ImageUrl,
ResortDetails=rd.ResortDetails,
签入=ra.签入,
地址=rd地址,
TotalPrice=ra.TotalPrice
}).采取(10);
ViewBag.resultSet=resultsObj;
编辑: 我的查询返回的数据来自多个表(因为它是一个联接),因此必须从查询结果中删除数据 将被提取并分离到两个不同的ViewModel中,这两个ViewModel对应于联接中的表

第一个viewmodel表示查询结果的每一行。第二个viewmodel只是一个列表,用于保存查询结果中包含的所有行。
我正试图理解如何将查询结果中的数据提取到viewmodels中,正如我在这里解释的那样。

我将返回一个ViewModel。通常,您可以使用它向/从视图和控制器发送数据

我目前正在做一个大项目,ViewModels对我来说非常好

查看此短片:

更新 我假设您的查询工作正常(我没有阅读)

通过ViewModel将数据发送到视图

首先创建所需的ViewModel类:

public class PageNameViewModel
{
    public string Name { get; set; }
    public IEnumerable<ResortDetailViewModel> ResortDetailViewModels { get; set; }
    ... rest of properties are not shown for clarity ...
}

public class ResortDetailViewModel
{
    public string Detail1 { get; set; }
    public int Detail2 { get; set; }
    ... etc. ...
}
公共类PageNameViewModel
{
公共字符串名称{get;set;}
公共IEnumerable视图模型{get;set;}
…为清晰起见,未显示其他属性。。。
}
公共类视图模型
{
公共字符串Detail1{get;set;}
公共int Detail2{get;set;}
等
}
现在使用控制器中的ViewModels(或者说,在viewmodel中填充数据):

var viewModel=(来自_db.ResData中的rd
将ra加入rd.RecNo上的_db.ResAvailability等于ra.RecNoDate
其中ra.TotalPriceInt32.Parse(resDeals.priceLowEnd)
.Take(10)
选择新的ClassNameViewModel
{
Name=rd.Name,
ImageUrl=rd.ImageUrl,
RestorDetailViewModels=rd.RestorDetails.Select(o=>
新的视图模型
{
Detail1=o.Detail1,
Detail2=o.Detail2,
等
},
签入=ra.签入,
地址=rd地址,
TotalPrice=ra.TotalPrice
});
返回视图(viewModel);
现在,您可以在视图中使用ViewModel(我假设您在观看我链接的视图时知道如何使用)

请注意,在这种情况下,ViewModels应该理想地保存基本数据(如果您以后计划序列化ViewModel并将其发送到另一个客户端,那么这将使您的工作更轻松)

在上面的代码中,我将任何复杂类型转换为基本类型,这应该在每个元素上进行(注意,我在
ResortResults
上做了相同的转换,因为我将它们转换为ViewModel数组,即仅保存基本数据的对象数组,因此没有深层层次结构)

我还移动了
Take(10)
移动到代码的上方,因此您不需要为每个元素创建一个ViewModel,然后只获取10!这只是白白浪费性能。通过将其移动到上方,我们在创建ViewModel之前获取10个元素,即仅为所需的元素创建ViewModel


我希望这会有所帮助。如果您需要任何进一步的帮助,请告诉我。

谢谢您的链接,我观看了视频。我想了解的是viewmodel在这种情况下应该如何使用。它应该用于存储查询结果的每一行还是
var viewModel = (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)
                                  .Take(10)
                                  select new ClassNameViewModel
                                  {
                                      Name = rd.Name,
                                      ImageUrl = rd.ImageUrl,
                                      ResortDetailViewModels = rd.ResortDetails.Select(o => 
                                                                          new ResortDetailViewModel
                                                                          {
                                                                               Detail1 = o.detail1,
                                                                               Detail2 = o.detail2,
                                                                               ... etc. ...
                                                                          },
                                      CheckIn = ra.CheckIn,
                                      Address = rd.Address,
                                      TotalPrice = ra.TotalPrice
                                  });

return View(viewModel);