在下面的几行中,我确实了解LINQ部分,但是当我尝试了解最后一行时,我变得完全麻木。
var role = from db.Role中的r
来自db.User中的u
其中r.RoleID == u.RoleID
&& u.UserName ==用户名
选择新的
{
RoleNames = r.RoleName
};
返回新的字符串[] {roles.ToArray()[0] .RoleNames};
变量roles
是IEnumerable类型(对吗?),它包含RoleNames
对象的匿名集合吗?
最后一行,复杂地分配给string [] {roles.ToArray()[0].RoleNames}
。
,roles
转换为数组(OK),然后转换为幻影索引[0](为什么?),最后转换为RoleNames
包含的roles
匿名类型,但这怎么变成字符串数组。
Thx先进,甚至可以看一下。
最佳答案
仅从这段代码很难说,但是感觉到这段代码没有达到作者的预期。
用户为什么有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/