Lambda表达问题

Phi*_*hil 1 c# linq lambda entity-framework-4

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

GroupSet groupToChange = context.GroupSet.Select(q => q.groupId == groupId);
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取并更改实体的名称.

groupToChange.groupName = newGroupName;
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*rth 5

你想用Where而不是Select.

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

另外,Where返回一个IEnumerable<T>,因为它无法知道只有一个元素符合您的条件.如果知道它只返回一个结果,则追加Single到查询,只返回一个元素.只有这样它才会编译:

GroupSet groupToChange = context.GroupSet.Where(q => q.groupId == groupId)
                                         .Single();
Run Code Online (Sandbox Code Playgroud)

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

GroupSet groupToChange = context.GroupSet.Where(q => q.groupId == groupId)
                                         .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)


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