简体   繁体   English

linq到通用列表C#

[英]linq to generic list C#

I am getting below XML from database: 我从数据库下面获取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>

This is my class structure to populate that XML: 这是我用来填充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;
        }
    }

I would like to use linq to populate "User" class. 我想使用linq填充“ User”类。 How? 怎么样?

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();

Please help me to complete the above code. 请帮助我完成以上代码。 What I have to write in ....... section to get the role? 我必须在.......部分中写什么才能获得角色?

Try this... 尝试这个...

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();

As already mentioned - use xml serializer . 如前所述-使用xml序列化器 Its implementation isn't perfect but for most cases it is ok. 它的实现不是完美的,但是在大多数情况下都可以。 It is also possible to use DataMember attributes and DataContractSerializer and deserializer to achieve the same goal. 也可以使用DataMember属性以及DataContractSerializer和反序列化器来实现相同的目标。

Easy:- 简单:-

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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM