在linq语法中没有添加的定义?

Kir*_*ite 3 c# rest wcf web-services

我得到了与前一个问题相关的帮助,但后来被告知要问一个与之相关的新问题但是给出的代码我遇到了一个错误:

public void AddPersonToCommunity(string person, string communityName) 
{ 
    var result = communities.Where(n => String.Equals(n.CommunityName, communityName)).FirstOrDefault(); 
    if (result != null) 
    { 
        result.Add(new Person() { PersonName = person }); //no definition for add?
    } 
}  
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看上一个问题以获取更多具体信息:休息时的关系?

如果我做的var result = communities;结果将有添加的定义所以我不知道发生了什么?

Jon*_*eet 7

你正在调用Where()哪个会返回一个IEnumerable<Community>(无Add方法),然后FirstOrDefault()返回一个Community(也没有Add方法).你会在哪里想到Add方法是从哪里来的?

我怀疑你真的想要:

if (result != null) 
{ 
    result.People.Add(new Person { PersonName = person });
}
Run Code Online (Sandbox Code Playgroud)

...因为Community.People是该社区中的人员名单,对吧?

请注意,如果你这样做var result = communities;,确实会有一个Add方法 - 但签名为Add(Community),而不是 Add(Person).

重要的是要保持一切的类型.这实际上与LINQ没什么关系.如果您尝试过,您会看到相同的结果:

Community community = new Community();
community.Add(new Person { PersonName = person });
Run Code Online (Sandbox Code Playgroud)