将linq查询结果传递给viewmodel

时间:2016-02-29 08:25:27

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

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

let verticalSpace = NSLayoutConstraint(item: image,  
                                       attribute: .Top,  
                                       relatedBy: .Equal,  
                                       toItem: self.topLayoutGuide,  
                                       attribute: .Bottom,  
                                       multiplier: 1, constant: 0)  

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

  [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);
    }

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

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

现在我的问题是,在我的动作代码中,当我尝试将查询结果分配给viewmodel的 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 时,它会给出编译器错误,如下所示。 enter image description here

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

2 个答案:

答案 0 :(得分:2)

在C#中使用对象初始值设定项时,不能在属性之间使用;,而是在初始化程序的末尾使用它

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

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

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

答案 1 :(得分:2)

试试这个:

library(data.table)
dt <- as.data.table(df)

#a table to join with
dt2 <- dt[, list(id = aggregate_with, a, b, aggregate_order)]
#set the right order
dt2[, c('a', 'b') := list(ifelse(aggregate_order == 'a,b', a, b), ifelse(aggregate_order == 'a,b', b, a))]
setkey(dt2, id)

#joining tables
res <- dt2[dt]

#replacing NA's with 0 and summing
for (j in c('a', 'b')) set(res, which(is.na(res[[j]])), j, 0)
res[!aggregate_with %in% id, list(a = sum(a) + i.a[1], b = sum(b) + i.b[1]), by = id]