我无法理解以下行:x => x.Id == _purchase.Centre.Id
代码在这里:
private void LoadCentreOptions()
{
MaterialCentreDataSource mcds = new MaterialCentreDataSource();
List<MaterialCentre> centres = mcds.GetAll() as List<MaterialCentre>;
_blankCentre = new MaterialCentre()
{
Name = Strings.JournalViewModel_CreditedPartyOption_NotSpecified
};
centres.Insert(0, _blankCentre);
_centreOptions = new ReadOnlyCollection<MaterialCentre>(centres);
if (_purchase.Centre == null)
_purchase.Centre = _blankCentre;
else
_purchase.Centre = _centreOptions.First(x => x.Id == _purchase.Centre.Id);
}
这里在调试时我正在看X.Id增加。怎么可能?
答案 0 :(得分:5)
api First
枚举集合并应用条件来检查哪一个匹配然后返回第一个匹配..所以代码转换为
foreach(var centreOption in _centreOptions)
{
if(centreOption.Id==_purchase.Centre.Id)
return centreOption;
}
如果你理解LINQ它基本上是
的缩写_centreOptions.Where(x => x.Id == _purchase.Centre.Id).First();
要了解First read Jon Skeets blogpost的确切实现。
答案 1 :(得分:0)
这一行针对_centreOptions
Enumerable中的每个元素运行:
_purchase.Centre = _centreOptions.First(x => x.Id == _purchase.Centre.Id);
检查对象的Id
是否等于_purchase.Centre.Id
它将返回满足条件的第一个元素。
所以你在两次迭代中看到两个id
。