为什么我不能访问我的对象模型的属性

本文关键字:对象模型 属性 我的 访问 不能 为什么 | 更新日期: 2023-09-27 18:06:40

由于某些奇怪的原因,即使我将其转换为其模型类型,我也无法访问该对象的属性。有人知道为什么吗?(这可能是显而易见的,但我是c#新手,所以请耐心等待!: o)

Users currentUser = new Users();            
currentUser = (from x in db_tc.Users where x.Id == Convert.ToInt32(User.Identity.Name) select x);

当我调用currentUser时,我只能访问CRUD方法和一个名为usrListList<Users>属性。我没有创建列表定义,所以我认为这是自动创建的Entity框架的一部分。

我确实尝试在实体查询之前用(Users)铸造currentUser,它根本没有帮助。

为什么我不能访问我的对象模型的属性

这是因为您只创建了查询,而没有实际执行它。添加Single()(或First()等)以获得结果:

var currentUser = (from x in db_tc.Users where x.Id == Convert.ToInt32(User.Identity.Name) select x).SingleOrDefault();
  • Single():获取序列的第一个元素,但如果没有找到元素将抛出异常如果序列有多个元素。
  • First():获取序列的第一个元素,但如果没有找到元素将抛出异常。
  • SingleOrDefault()FirstOrDefault():与上面相同,但将返回default(T)而不是抛出空序列。

LINQ的"延迟执行"方面可能是最难以理解的部分。基本思想是,您可以使用查询操作(Where()Select()等)构建一个查询,然后您可以使用一种非延迟执行操作(Single()ToList()等)

执行该查询以实际获得其结果。

这里的操作将返回DB将返回的匹配列表,它是一个集合。如果你想只返回一条记录,请将.First();附加到linq查询的末尾。

也删除这一行Users currentUser = new Users();并添加var currentUser =...

来自"良好LINQ实践"马车的更多提示…

LINQ应该"通常"返回var,然后转换为您期望的数据类型。我发现的另一个好的实践是立即验证从LINQ返回的结果,因为任何没有验证的使用都非常容易出现异常。例如:

var qUser = (from x in db.Users select x);
if (qUser != null && currentUser.Count() > 0)
{
    List<User> users = (List<User>)qUser.ToList();
    ... process users result ...
}

在每个LINQ查询之后都需要检查非null和计数大于0。;)

不要忘记在SqlException中加入try-catch !