我尝试将复杂域模型转换为CSV格式。然而,该模型的动态结构正在推动我的LINQ魔法达到极限:)
所需的结果应如下所示。标题行,然后是数据行。 请注意,某些字段为空,其他字段为多个。
PropA;RolenameA;RolenameB;RolenameC
123;username1,username2;username1;username2
321;;;username1
我希望创建一个LINQ查询,该查询动态地为每个角色添加属性,然后使用正确的用户名填充该属性。 我认识到标题和数据必须在两个不同的语句中。
var result = new { "PropA", Roles.ForEach(x => x.Rolename) }
result += query.Select(x => new { x.PropA, x.UserRoles.ForEach(...) });
我试图用LINQ做不到的事情,我应该这样做"手动"用动态物体,还是我需要学习一些黑魔法?)?
public class A
{
public int PropA { get; set; }
public IEnumerable<UserRole> UserRoles { get; set; }
}
public class UserRole
{
public Role Role { get; set; }
public User User { get; set; }
}
public class Role
{
public string Rolename { get; set; }
}
public class User
{
public string Username { get; set; }
}
答案 0 :(得分:0)
我最终使用ExpandoObject“手动”执行此操作。
foreach (var item in items)
{
var obj = new ExpandoObject() as IDictionary<string, Object>;
obj.Add("PropA", item.PropA);
foreach (var role in roles)
{
obj.Add(role.Name,
String.Join(",", item.UserRole.Where(x => x.Role == role).Select(x => x.User.Name)));
}
// omitted...
}