如何用System.Data.Entity实现根据邮箱查询用户的类似SQL SELECT WHERE语句?
解决方案
你的猜测没错,Find方法确实只能接收主键值作为参数,所以用它查询邮箱肯定行不通。要实现按邮箱获取用户对象,你可以用LINQ的FirstOrDefault或SingleOrDefault方法:
正确代码示例
public user GetEmail(string email) { // 若邮箱是唯一约束,推荐用SingleOrDefault,多匹配时会抛出异常,便于排查数据问题 return userContext.users.SingleOrDefault(u => u.Email == email); // 若允许邮箱重复(不建议),可用FirstOrDefault返回第一个匹配项,无匹配时返回null // return userContext.users.FirstOrDefault(u => u.Email == email); }
补充说明
SingleOrDefault:适用于邮箱唯一的场景,能快速发现数据重复问题,无匹配结果时返回null。FirstOrDefault:仅返回第一个匹配的用户,无匹配时返回null,适合邮箱存在重复的特殊场景。
内容的提问来源于stack exchange,提问作者Mitch W
相关产品推荐
相关产品推荐

