linq 到泛型列表 C#

本文关键字:列表 泛型 linq | 更新日期: 2023-09-27 18:32:18

我从数据库中得到低于XML:

<Users>
        <User>
            <USRID>1234</USRID>
            <USERNAME>ABCD</USERNAME>
            <ROLES>
                <ROLE>
                    <ROLEID>1</ROLEID>
                    <ROLENAME>GlobalAdministrator</ROLENAME>
                    <ISDEFAULTROLE>1</ISDEFAULTROLE>
                </ROLE>
                <ROLE>
                    <ROLEID>2</ROLEID>
                    <ROLENAME>Administrator</ROLENAME>
                    <ISDEFAULTROLE>0</ISDEFAULTROLE>
                </ROLE>
            </ROLES>
        </User>
        <User>
            <USRID>2312</USRID>
            <USERNAME>XUX</USERNAME>
            <ROLES>
                <ROLE>
                    <ROLEID>3</ROLEID>
                    <ROLENAME>AccountManager</ROLENAME>
                    <ISDEFAULTROLE>1</ISDEFAULTROLE>
                </ROLE>
                <ROLE>
                    <ROLEID>5</ROLEID>
                    <ROLENAME>Approver</ROLENAME>
                    <ISDEFAULTROLE>0</ISDEFAULTROLE>
                </ROLE>
            </ROLES>
        </User>
    </Users>

这是我填充该 XML 的类结构:

public class Role
    {
        public string RoleId
        {
            get;
            set;
        }
        public string RoleName
        {
            get;
            set;
        }
        public bool IsDefaultRole
        {
            get;
            set;
        }
    }
public class User
    {
        public User()
        {
            UserRoles = new List<Role>();
        }
        public string UserId
        {
            get;
            set;
        }
        public string UserName
        {
            get;
            set;
        }
        public List<Role> UserRoles
        {
            get;
            set;
        }
    }

我想使用 linq 来填充"用户"类。怎么做?

XDocument doc = XDocument.Parse(userXML);
                lstUser = (from dem in doc
                                       .Descendants("Users")
                                       .Descendants("User")
                           select new User
                           {
                              UserId = dem.Element("USRID").Value,
                              UserName = dem.Element("USERNAME").Value,
                              ..............................   
                           }).ToList();

请帮我完成上面的代码。我必须写什么...部分来获得角色?

linq 到泛型列表 C#

试试这个...

var lstUser = doc.Descendants("Users").Descendants("User")
    .Select(dem => new User
    {
        UserId = dem.Element("USRID").Value,
        UserName = dem.Element("USERNAME").Value,
        UserRoles = dem.Descendants("ROLES").Descendants("ROLE")
            .Select(x => new Role
            {
                RoleId = x.Element("ROLEID").Value,
                RoleName = x.Element("ROLENAME").Value,
                IsDefaultRole = x.Element("ISDEFAULTROLE").Value == "1"
            })
           .ToList()
    }).ToList();

如前所述 - 使用 xml 序列化程序。它的实现并不完美,但在大多数情况下是可以的。也可以使用 DataMember 属性以及 DataContractSerializer 和 反序列化程序来实现相同的目标。

简单:-

List<User> users = xdoc.Root.Descendants("User")
                       .Select(x => new User
                                {
                                   UserId = x.Element("USRID").Value,
                                   UserName = x.Element("USERNAME").Value,
                                   UserRoles = x.Descendants("ROLE")
                                                .Select(z => new Role
                                                         {
                                                            RoleId = z.Element("ROLEID").Value,
                                                            RoleName = z.Element("ROLENAME").Value,
                                                            IsDefaultRole = z.Element("ISDEFAULTROLE").Value == "1" ? true : false
                                                   }).ToList()
                               }).ToList();