我无法理解这是如何工作的x => x.Id == _purchase.Centre.Id?

时间:2012-04-15 12:06:06

标签: c# .net linq lambda

我无法理解以下行: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增加。怎么可能?

2 个答案:

答案 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