我是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
。