2016-03-03 32 views
2

我上课喜欢这个如何从LINQ查询使用的ViewModels

public class class1 
    { 
     public int class1id { get; set; } 
     public string name { get; set; } 
    } 
    public class class2 
    { 
     public int id { get; set; } 
     public int class1id { get; set; } 
     public string from { get; set; } 
     public string to { get; set; } 
    } 

    public class viewmodel 
    { 
     public class2 deletedocument { get; set; } 
     public IList<class2> deletelist { get; set; } 
    } 

现在我想用的名字返回一个列表,发件人,收件人属性返回列表。这里来自class1和class1id的名称是外键(class1)。我怎样才能做到这一点?我需要改变我的模型吗?

+0

您查看模型需要包含你想要的3个属性('name','from'和'to') –

+0

是的。我怎样才能把3个属性在viewmodel?直接我可以把或我需要将所有属性转换为列表?最后,我想将列表绑定到viewmodel的对象,然后我想通过它来查看。可能吗? – Niranjan

+0

不,他们不应该是列表,只是'公共字符串名称{get;组; }'等等(然后你创建你的视图模型的集合) –

回答

2

型号

你可以做的是让那些具有三个属性一Model

public class MyModel { 
    public string name { get; set; } 
    public string from { get; set; } 
    public string to { get; set; } 
} 

查看

,然后在RazorView,你声明的IEnumerable<MyModel>作为您的Model

@model IEnumerable<ProjectName.Models.MyModel> 

控制器

而在你Controller你从其他两个查询的查询,在此过程中创造IEnumerable<MyModel>并返回

public ActionResult Index(){ 
    var models = from a in blabla //query what you want here, generate IEnumerable<MyModel> 
       join b in blabla2 on a.class1id equals b.class1id 
       select new MyModel{ name = a.name, from = b.from, to = c.to} 
    return View(models); 
} 
+0

其实我有一些数据来发布这样的@ Html.TextBoxFor(x => x.deletelist.from,我正在显示像这样的foreach(var item在Model.deletelist){@ Html.DisplayFor(modelItem => item.name)}所以我不想@model IEnumerable Niranjan

+0

@Niranjan如果你不需要'deletelist'在你的模型,你可以把它放在'ViewBag'中以避免混淆,但是如果你真的需要这个,那么你需要改变你的'Controller''Index''Action'就像我显示的那样''viewmodel''实例同时拥有' IEnumerable '和'deletelist',所以你可以使用'deletelist',因为你已经这样做了,但是我不想将删除列表和我的MyModel混合使用 – Ian

+0

这似乎是有效的,但是如何将数据发布到db和在同一视图中显示数据?我应该更改我的@ Html.TextBoxFor和Ht ml.DisplayFor是吗? – Niranjan