有人可以帮我解决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>
}
答案 0 :(得分:3)
Model.DetailSet.Where(x=>x.Label == "Mcity").Select(x=>x.LabelValue)
或者如果您只有一个记录标签== Mcity
Model.DetailSet.SingleOrDefault(x=>x.Label == "Mcity").LabelValue
答案 1 :(得分:1)
您需要使用Single
选择一条记录,然后才能获取该属性。
Model.DetailSet.Single(m => m.Label == "MState").LabelValue
答案 2 :(得分:1)
Lambda 表达式可用于创建委托类型。我发现向某人解释这个问题的最简单方法是向他们展示一个项目列表,例如您的List<FullDetailSet> DetailSet
,并根据特定条件询问他们您希望从该列表中找到哪些项目?
如果您想要所有带有“Dog”标签的物品,您可以这样做:
Model.DetailSet.Where(d => d.Label == "Dog").Select(d => d.Value);
这将覆盖DetailSet
中的项目并检查每个项目是否有Label
的“狗”。由于缺乏对正确术语的更好理解,您将迭代该列表并根据您的条件获取所需内容。这就是我使用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();