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 作为占位符,对我来说它看起来好像 dDetailSet.

的单一表示

如果您只需要 DetailSet 中的一条记录,您将使用 Single 而不是 Where

Model.DetailSet.Single(d => d.Label == "Dog").Select(d => d.Value);

如果您不需要满足条件的那些记录中的 Value 个,您可以像这样获取整个列表:

Model.DetailSet.Where(d => d.Label == "Dog").ToList();