为什么我不能访问我的对象模型的属性
本文关键字:对象模型 属性 我的 访问 不能 为什么 | 更新日期: 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方法和一个名为usrList
的List<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 !