没有定义 linq 语法中的 add
本文关键字:add 语法 linq 定义 | 更新日期: 2023-09-27 18:30:23
我正在获得与上一个问题相关的帮助,但随后被告知要问一个与之相关的新问题,但给出的代码遇到了错误:
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?
}
}
您可以在此处查看上一个问题以获取更多细节:休息关系?
如果我这样做var result = communities;
结果将具有添加的定义,所以我不确定发生了什么?
您正在调用Where()
它将返回一个IEnumerable<Community>
(没有Add
方法),然后FirstOrDefault()
返回一个Community
(也没有Add
方法)。您期望Add
方法从何而来?
我怀疑你真的想要:
if (result != null)
{
result.People.Add(new Person { PersonName = person });
}
。因为Community.People
是那个社区的人的名单,对吧?
请注意,如果您这样做var result = communities;
确实会有一个 Add 方法 - 但签名为 Add(Community)
,而不是 Add(Person)
。
所有事物的类型正确很重要。这实际上与 LINQ 关系不大。如果您尝试过,您会看到相同的结果:
Community community = new Community();
community.Add(new Person { PersonName = person });
添加到@Jon的答案中
IEnumerable<T>
有一个Concat
扩展方法,它允许您在逻辑上将两个IEnumerable<T>
对象组合成一个跨越两个集合的单个IEnumerable<T>
。 您可以将此逻辑扩展到追加单个元素,然后将其应用于当前情况。
public static IEnumerable<T> Concat(this IEnumerable<T> enumerable, T value) {
foreach (var cur in enumerable) {
yield return cur;
}
yield return value;
}
...
result = result.Concat(new Person() { PersonName = person });