在下面的几行中,我确实了解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/

10-13 01:45