我是lambda表达式和linq的新手,无法弄清楚我在做什么错:

GroupSet groupToChange = context.GroupSet.Select(q => q.groupId == groupId);


我正在尝试获取和更改实体的名称。

groupToChange.groupName = newGroupName;


我对第二行没有任何问题。有任何想法吗?它告诉我我不能将bool转换为GroupSet,但是该函数返回找到的内容,对吗?

最佳答案

您要使用Where而不是Select

Where返回与提供的lambda表达式匹配的所有内容。
Select是一个转换。它使用提供的lambda表达式转换每个元素。

另外,Where返回一个IEnumerable<T>,因为它不知道只有一个元素可以满足您的条件。如果您知道它只会返回一个结果,请将Single附加到查询中,仅返回一个元素。只有这样才能编译:

GroupSet groupToChange = context.GroupSet.Where(q => q.groupId == groupId)
                                         .Single();


如果不确定某个元素是否匹配,请使用SingleOrDefault

GroupSet groupToChange = context.GroupSet.Where(q => q.groupId == groupId)
                                         .SingleOrDefault();


两者之间的区别:
如果Single的结果集为空,则Where将引发异常。
SingleOrDefault将返回default(T),即您的情况下为null

10-08 00:48