【问题标题】:Pass linq query result to viewmodel将 linq 查询结果传递给 viewmodel
【发布时间】:2016-02-29 08:25:26
【问题描述】:

在我的 MVC Web 应用程序中,我有从数据库中获取记录的 linq 查询,我想使用 viewmodel 在视图上显示该记录。我已尝试使用以下代码。

  [HttpGet]
  public ActionResult CreatePDF()
    {
        RentalAgreementEntities db = new RentalAgreementEntities();
        String strSession1 = "39726-10275-6027589725",strStatus = "Y",strUserType = "L";

        var q = (from um in db.User_Master
                 join ut in db.UserType_Master on um.US_SerialNo.ToString() equals ut.UT_UserNo
                 join pu in db.PropertyUser_Master on ut.UT_SerialNo.ToString() equals pu.PU_UserNo
                 join pr in db.Property_Master on pu.PU_PropertyNo equals pr.PR_SerialNo.ToString()
                 where pr.PR_MakerID == strSession1
                 && ut.UT_Status == strStatus
                 && ut.UT_UserType == strUserType

                 select new 
                 {
                     um.US_FirstName,
                     um.US_LastName
                 }
                 ).AsEnumerable().Select(um => new User_Master {

                US_FirstName = um.US_FirstName.ToString(),
                US_LastName=um.US_LastName

            }).ToList();

        var myviewmodel=new viewmodelPDF()
        {
            lsusermaster=q.ToList();
        }
        return View("pdfgenerationvw",myviewmodel);
    }

我还创建了 viemodel 来管理所有模型以显示在视图上(这里,只有一个模型访问代码)。

public class viewmodelPDF
{ 
  public List<User_Master> lsusermaster { get; set; }
}

我的模型类,我将从数据库中获取记录。

 public partial class User_Master
{
  public string US_FirstName { get; set; }
  public string US_LastName { get; set; }
  public int US_SerialNo { get; set; }
}
//Other Models

现在我的问题是,在我的操作代码中,当我尝试将查询结果分配给 viewmodel 的 lsusermaster 时,它会给出如下编译器错误。

我不知道,为什么会抛出这个编译错误,如何将查询结果分配给 viemodel 属性?

【问题讨论】:

  • 可以,只要去掉 ;符号。由于您使用的是对象表示法,因此不能在每一行上使用分号,但可以使用常规逗号。或者在这种情况下,根本没有迹象。
  • 当我删除; 然后编译器给出错误; Expected
  • 移动 ;在最后一个}之后

标签: c# asp.net-mvc model-view-controller viewmodel


【解决方案1】:

试试这个:

var myviewmodel=new viewmodelPDF()
{
  lsusermaster=q.ToList()
};

【讨论】:

  • 谢谢,它有效。在操作代码lsusermaster 中显示一条记录,但在视图模型lsusermaster 中,它显示零条记录。是否需要在 viemodel 类中创建 User_Master 模型的对象来访问记录?
  • 您的代码在我看来是正确的。当您说它在您的视图模型 lsusermaster 中显示零记录时,您是什么意思?您是否在视图中使用视图模型 lsusermaster?
  • 是的。我将在视图中显示来自lsusermaster 的记录。
  • 知道了,查看页面有小问题,我解决了,谢谢您的回复。
【解决方案2】:

当你在 C# 中使用对象初始化器时,你不能在属性之间使用;,你在初始化器的末尾使用它

所以只需删除;(或按照建议使用,),并将其移至初始化程序块的末尾

var myviewmodel=new viewmodelPDF()
{
  lsusermaster=q.ToList()
};

即使没有更多属性,使用, 也可以工作......它“看起来”很糟糕,但如果您需要它们,添加新属性会更容易......如果代码是最终的,我会没用过,个人喜好吧

【讨论】:

    猜你喜欢
    • 2011-10-25
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    相关资源
    最近更新 更多