c# - 如何在 View 模型中存储 linq 查询结果

标签 c# asp.net sql-server linq asp.net-core

我有一个 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; }
}

创建列表后,我需要将其导入到 View 页面中,以便查询结果可以存储在表中。我之前已经完成了获取查询结果的过程,但使用存储过程除外,在存储过程中我能够遍历读取器对象并根据需要存储返回的行数据。我知道使用 Viewmodel 将数据从 Controller 传递到 View 是标准做法,但我在使用 linq 查询方面还是个新手,所以我不确定如何实际提取从 linq 查询结果返回的数据并将其绑定(bind)查看模型。

如何从 linq 查询结果中提取数据并将其存储在 View 模型类中?

最佳答案

我将如何做到这一点,方法是创建一个类对象,该对象将具有您希望从返回的 linq 查询中获得的所有属性。 -

所以过程是,我们做linq查询,得到resultsObj 然后我们将有一个新的类调用 ViewModelOfPage(我们将返回到页面的内容),它将具有我们想要返回的所有属性。

我们的类看起来像 -

public class ViewModelOfPage
{

public string Name {get;set;}
public string ImageUrl{get;set;}
public string ResortDetails {get;set;}
public string CheckIn {get;set;}
public string Address {get;set;}
public int TotalPrice {get;set;} 

// this may be a double in your example or w/e value you want it set to.                                   
}

然后我们将在我们的 Controller 中创建此类对象,使用我们通过 linq 查询返回的 obj 的值初始化它,然后将该对象发送到我们可以在 View 中绑定(bind)其属性的页面。

所以在我们的 Controller 中,我们刚刚完成了 linq 查询并有了我们的 resultsObj 对象。

然后我们将像这样初始化我们的 View 模型:

ViewModelOfPage vm = new ViewModelOfPage
{

Name = resultsObj.Name,
ImageUrl = resultsObj.ImageUrl ,
ResortDetails = resultsObj.ResortDetails,
CheckIn = resultsObj.CheckIn,
Address = resultsObj.Address,
TotalPrice resultsObj.TotalPrice

}

return View("ourView",vm);

希望这有助于解释这个过程,这就是我尝试这样做的方式。如果有更好的方法请在下面说明:)

仅供引用,这是我的第一篇文章,所以我很可能以不正确的方式编写代码,所以我向大家道歉,因为他们在阅读它时可能会感到痛苦 :D 希望你们周二过得愉快。

如果您想将所有行返回到页面,您可以这样做:

List<ViewModelOfPage> vm = new ViewModelOfPage;
foreach (var row in resultsObj)
{
    //An example of only selecting certain results
    if(row.Name == "John" && row.TotalPrice > 15){
        var tempVm = new ViewModelOfPage
        {
            Name = row.Name,
            ImageUrl = row.ImageUrl ,
            ResortDetails = row.ResortDetails,
            CheckIn = row.CheckIn,
            Address = row.Address,
            TotalPrice row.TotalPrice
        };
        vm.add(tempVm);
    }
}
view("ourview",vm);

关于c# - 如何在 View 模型中存储 linq 查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50257763/

相关文章:

php - 数据以 64512 个字符结束 - MSSQL//PHP//OPENSuSE//APACHE2

c# - WIN RT 中是否存在二进制序列化程序?

c# - AspNetCore 2.0 声明总是空的

c# - 将 JSON 数据发布到 WCF 服务时出现错误 415

c# - 迭代数据表中的特定列

sql - 从不同的表中获取 XML

c# - 如何以编程方式将里程碑拖放到 Visio 中的 block 时间轴上

mysql - "Arithmetic operation resulted in an overflow."转换为 Azure 项目后在 ASP.Net 中出现此错误

asp.net - 回发后UserControl Viewstate丢失所有值

sql - 如何从cell中获取每个满足条件的人的最新数据?