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();
请帮我完成上面的代码。我必须写什么...部分来获得角色?
试试这个...
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();