razor 视图中的 Lambda 表达式
Lamba expression in a razor view
有人可以帮助我了解 Lambda 表达式吗?
我的 ModelVM 看起来像:
namespace MReports.Models
{
public class FullDetailVM
{
public FullDetailVM()
{
DetailSet = new List<FullDetailSet>();
}
........
public List<FullDetailSet> DetailSet { get; set; }
}
public class FullDetailSet
{
public FullDetailSet(){ }
public string Mnum { get; set; }
public string Label { get; set; }
public string LabelValue { get; set; }
}
}
上述模型中的数据将是:
DetailSet[0] = {1,"MCity","LosAngeles"}
DetailSet[0] = {1,"MState","California"}
DetailSet[0] = {1,"MZip","90045"}
DetailSet[0] = {1,"MStreet","Cardiff"}
DetailSet[0] = {1,"MHouse No","1234"}
DetailSet[0] = {1,"MApt","1"}
视图(剃刀):
@model MReports.Models.FullDetailVM
@if(Model != null)
{
<div class="row contentHeaderInfo">
<ul class="list-inline">
<li> City :
</li>
<li>
//Display LabelValue corresponding to Mcity
Model.DetailSet.select(LabelValue).Where(Label== "Mcity");
</li>
<li> State:
</li>
<li>
//Display LabelValue corresponding to MState
Model.DetailSet.select(LabelValue).Where(Label== "MState");
</li>
</ul>
</div>
}
Model.DetailSet.Where(x=>x.Label == "Mcity").Select(x=>x.LabelValue)
或者如果您只有一条记录 Label == Mcity
Model.DetailSet.SingleOrDefault(x=>x.Label == "Mcity").LabelValue
你需要select一条记录使用Single
,然后就得到属性。
Model.DetailSet.Single(m => m.Label == "MState").LabelValue
Lambda 表达式可用于创建委托类型。我发现向某人解释这一点的最简单方法是向他们展示项目列表,例如您的 List<FullDetailSet> DetailSet
,并询问他们根据特定条件您想要该列表中的哪些项目?
如果您想要标签为 "Dog" 的所有项目,您可以这样做:
Model.DetailSet.Where(d => d.Label == "Dog").Select(d => d.Value);
这将遍历 DetailSet
中的项目并检查每个项目的 Label
是否为 "Dog"。由于缺乏对正确术语的更好理解,您正在遍历该列表并根据您的条件获取您需要的内容。这就是为什么我使用 d
作为占位符,对我来说它看起来好像 d
是 DetailSet
.
的单一表示
如果您只需要 DetailSet
中的一条记录,您将使用 Single
而不是 Where
。
Model.DetailSet.Single(d => d.Label == "Dog").Select(d => d.Value);
如果您不需要满足条件的那些记录中的 Value
个,您可以像这样获取整个列表:
Model.DetailSet.Where(d => d.Label == "Dog").ToList();
有人可以帮助我了解 Lambda 表达式吗?
我的 ModelVM 看起来像:
namespace MReports.Models
{
public class FullDetailVM
{
public FullDetailVM()
{
DetailSet = new List<FullDetailSet>();
}
........
public List<FullDetailSet> DetailSet { get; set; }
}
public class FullDetailSet
{
public FullDetailSet(){ }
public string Mnum { get; set; }
public string Label { get; set; }
public string LabelValue { get; set; }
}
}
上述模型中的数据将是:
DetailSet[0] = {1,"MCity","LosAngeles"}
DetailSet[0] = {1,"MState","California"}
DetailSet[0] = {1,"MZip","90045"}
DetailSet[0] = {1,"MStreet","Cardiff"}
DetailSet[0] = {1,"MHouse No","1234"}
DetailSet[0] = {1,"MApt","1"}
视图(剃刀):
@model MReports.Models.FullDetailVM
@if(Model != null)
{
<div class="row contentHeaderInfo">
<ul class="list-inline">
<li> City :
</li>
<li>
//Display LabelValue corresponding to Mcity
Model.DetailSet.select(LabelValue).Where(Label== "Mcity");
</li>
<li> State:
</li>
<li>
//Display LabelValue corresponding to MState
Model.DetailSet.select(LabelValue).Where(Label== "MState");
</li>
</ul>
</div>
}
Model.DetailSet.Where(x=>x.Label == "Mcity").Select(x=>x.LabelValue)
或者如果您只有一条记录 Label == Mcity
Model.DetailSet.SingleOrDefault(x=>x.Label == "Mcity").LabelValue
你需要select一条记录使用Single
,然后就得到属性。
Model.DetailSet.Single(m => m.Label == "MState").LabelValue
Lambda 表达式可用于创建委托类型。我发现向某人解释这一点的最简单方法是向他们展示项目列表,例如您的 List<FullDetailSet> DetailSet
,并询问他们根据特定条件您想要该列表中的哪些项目?
如果您想要标签为 "Dog" 的所有项目,您可以这样做:
Model.DetailSet.Where(d => d.Label == "Dog").Select(d => d.Value);
这将遍历 DetailSet
中的项目并检查每个项目的 Label
是否为 "Dog"。由于缺乏对正确术语的更好理解,您正在遍历该列表并根据您的条件获取您需要的内容。这就是为什么我使用 d
作为占位符,对我来说它看起来好像 d
是 DetailSet
.
如果您只需要 DetailSet
中的一条记录,您将使用 Single
而不是 Where
。
Model.DetailSet.Single(d => d.Label == "Dog").Select(d => d.Value);
如果您不需要满足条件的那些记录中的 Value
个,您可以像这样获取整个列表:
Model.DetailSet.Where(d => d.Label == "Dog").ToList();