如何使用LINQ将值传递给ViewModel?

时间:2012-06-06 06:03:11

标签: c# asp.net-mvc linq mvvm model

我需要使用LINQ添加数据以查看模型 我的观点模型是:

public class SearchScrapViewModel 
{ 
public WClass wClass{get; set;} 
public SClass sClass{get; set;} 
public YClass yClass { get; set; } 
} 

public class WClass 
{ 
public string title { get; set; } 
public string link { get; set; } 
} 
public class SClass 
{ 
public string title { get; set; } 
public string link { get; set; } 
} 
public class YClass 
{ 
public string title { get; set; } 
public string link { get; set; } 
}

我需要使用这3个类和3个不同的LINQ查询,然后将数据传递给return View(SearchScrapViewModel);

var wikians = //LINQ Logic 
select new SearchScrapViewModel 
{ 
wClass.link = link.Attributes["href"].Value, //Error: I am not able to add to wClass 
wClass.title = link.InnerText 
}; 

和其他类似

然后传递给return View(SearchScrapViewModel);,以便我可以在此控制器的视图中访问所有3个类

怎么做?

3 个答案:

答案 0 :(得分:1)

您忘记创建WClass的实例

select new SearchScrapViewModel {
    wClass = new WClass { 
        link = link.Attributes["href"].Value,
        title = link.InnerText 
    }
}; 

或者,您可以使WClass(和SClass和YClass)成为struct而不是类,然后您不需要实例化它。但是,在这种情况下,您应该make the struct immutable

答案 1 :(得分:0)

LINQ并不是最重要的,我不知道这是你正在寻找的最佳方法。我建议查看Builder Pattern来完成此任务。如果你真的想,你可以在一个LINQ查询(使用对象初始化器)中执行此操作,但它可能不像构建器那样读取干净(但这是我的两分钱):

select new SearchScrapViewModel
{
    wClass = new wClass{title = xyz, link = xyz},
    sClass = new sClass...
    yClass = new yClass...
}

答案 2 :(得分:0)

我不清楚为什么在你的例子中需要一个select语句。在任何情况下,您都不能将SearchScrapViewModel作为返回值返回,因为这是一个类型而不是实例。除非你的代码是为这篇文章简化的,你确实需要linq,我建议:

var wikians = 
new SearchScrapViewModel {
    wClass = new WClass { 
        link = link.Attributes["href"].Value,
        title = link.InnerText 
    }
}; 

return View(wikians);