我有一个用户表:
Users:
+ID
+Username
+...
我想使用myDBContext.Users.Find(Username)
来结束用户。
在我目前的情况下,我不能使用他的身份证。
我必须使用完整的LINQ查询吗? e.g。
var user = from users in myDBContext.Users.Find(Username)
where users.Username == username
select users
我还尝试将用户名定义为我的edmx中的主键但导致以下错误:
主要角色用户引用的属性必须完全正确 与EntityType的键相同 CamelotShiftManagementModel.User由Principal Role引用 关系的关系约束 CamelotShiftManagementModel.AssociationUserFK1。确保所有的钥匙 属性在Principal中指定 角色。 C:\ Code \ CamelotShiftManagement \ CamelotShiftManagement \ Models \ CamelotDB.edmx 278 11 CamelotShiftManagement
答案 0 :(得分:48)
试试,
User myUser = myDBContext.Users.SingleOrDefault(user => user.Username == username);
使用SingleOrDefault
Single
。如果用户不存在,那么Single
将抛出错误。如果找不到用户,SingleOrDefault
将返回null
,否则将返回User
对象。
SingleOrDefault
和FirstOrDefault
之间的选择
您可以使用SingleOrDefault
和FirstOrDefault
获取用户对象,但在选择使用哪种方法时请考虑以下几点。
SingleOrDefault
,因为如果有多个元素可用,它将抛出异常。FirstOrDefault
更好效果与SingleOrDefault
<强> FirstOrDefault
强>
FirstOrDefault
或First
。其他一些评论
username
是主键,那么我认为SingleOrDefault
和FirstOrDefault
性能之间没有太大/没有区别,因为主键具有索引并且索引列上的搜索将始终更快比普通的专栏。Single
或SingleOrDefault
会生成常规TSQL,例如“SELECT ...”。First
或FirstOrDefault
方法将生成TSQL语句,例如“SELECT TOP 1 ...”答案 1 :(得分:4)
我找到了它:
User myUser = myDBContext.Users.Single(user => user.Username == i_Username);