如何使用 LINQ 将值传递给 ViewModel
本文关键字:ViewModel 值传 何使用 LINQ | 更新日期: 2023-09-27 18:36:28
>我需要使用 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 个类
怎么做?
你忘了创建你的WClass的实例:
select new SearchScrapViewModel {
wClass = new WClass {
link = link.Attributes["href"].Value,
title = link.InnerText
}
};
或者,你可以让 WClass(以及 SClass 和 YClass)成为结构而不是类,这样你就不需要实例化它了。但是,在这种情况下,您可能应该使结构不可变。
LINQ 不是万能的,我不知道这是您正在寻找的最佳方法。我建议查看构建器模式来完成此操作。如果你真的想这样做,你可以在一个 LINQ 查询中执行此操作(使用对象初始值设定项),但它读起来可能不像生成器那样干净(但这是我的两美分):
select new SearchScrapViewModel
{
wClass = new wClass{title = xyz, link = xyz},
sClass = new sClass...
yClass = new yClass...
}
我不清楚为什么在你的例子中需要一个选择语句。 在任何情况下,您都不能返回 SearchScrapViewModel 作为您的返回,因为这是一种类型而不是实例。 除非你的代码在这篇文章中得到了简化,并且你确实需要linq,否则我建议:
var wikians =
new SearchScrapViewModel {
wClass = new WClass {
link = link.Attributes["href"].Value,
title = link.InnerText
}
};
return View(wikians);