簡體   English   中英

linq到通用列表C#

[英]linq to generic list C#

我從數據庫下面獲取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填充“ User”類。 怎么樣?

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

請幫助我完成以上代碼。 我必須在.......部分中寫什么才能獲得角色?

嘗試這個...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM