gpt4 book ai didi

c# - 无法理解这个 IEnumerable.ToArray() 示例

转载 作者:行者123 更新时间:2023-11-30 19:12:35 33 4
gpt4 key购买 nike

在接下来的几行中,我确实理解了 LINQ 部分,但是当我试图理解最后一行时,我变得完全 NumPy 了。

var roles=from r in db.Role               from u in db.User               where r.RoleID==u.RoleID               && u.UserName==username               select new                 {                    RoleNames=r.RoleName                 };               return new string[] {roles.ToArray()[0].RoleNames};

变量 roles 是 IEnumerable 类型(对吗?)并且它包含 RoleNames 对象的匿名集合?最后一行,对 string[]{roles.ToArray()[0].RoleNames} 的复杂赋值。
,roles 转换为数组 (OK),然后是幻像索引 [0](为什么?),最后 RoleNames 匿名类型包含在 roles 但这一切如何变成一个字符串数组。
Thx in advanced 甚至看一眼。

最佳答案

仅从这段代码很难说,但感觉这段代码没有按照作者的意图进行。

为什么用户有 RoleID 列?如果用户只能拥有一个角色,那也没关系。但是这段代码似乎暗示用户可以拥有多个角色。用户表是否包含每个用户的多个条目,每个条目都有分配给他们的每个角色?用户/角色通常是多对多关系。

原作者正在获取该查询的结果并仅获取它的第一个结果(在这种情况下,调用 roles.First() 可能更合适),然后获取那里的一个角色并将其返回到一个数组中。如果这个数组只有一个元素,那没问题,但男孩感觉不对。如果作者追求多个角色,他们只会得到一个。更不用说如果根本找不到任何角色,这段代码就会崩溃。

如果一个用户真的只能拥有一个角色,那么有更简单(也更容易阅读)的方式来获得该角色。也许是这样的:

var roles=from r in db.Role
from u in db.User
where r.RoleID==u.RoleID
&& u.UserName==username
select r.RoleName;

// at this point roles will probably have zero or one entry, so you can do
return roles.FirstOrDefault(); // return the one role found as a string
// or null if none were

// or if you really do want the array
return roles.ToArray(); // will return a string array,
// possibly having 1 or 0 elements

关于c# - 无法理解这个 IEnumerable<T>.ToArray() 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6559599/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com