【发布时间】:2014-09-20 23:55:35
【问题描述】:
我正在尝试将复杂的域模型转换为 CSV 格式。然而,模型的动态结构将我的 LINQ 魔法推到了极限:)
所需的结果应如下所示。一个标题行,然后是数据行。 请注意,有些字段是空的,有些则有多个。
输出
PropA;RolenameA;RolenameB;RolenameC
123;username1,username2;username1;username2
321;;;username1
我希望创建一个 LINQ 查询,它可以动态地为每个角色添加属性,然后用正确的用户名填充该属性。 我认识到标题和数据必须在 2 个不同的语句中。
伪代码
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; }
}
【问题讨论】:
-
我之前使用dynamic linq 库取得了一些成功
-
仍然不确定我是否理解。会有其他属性吗,比如
propB?那会怎么样? -
你可以通过拥有类(PropA,Role)然后导出到 Excel 数据透视表,其中行是 PropA,列是角色,数据将被计数
-
是的,还会有其他属性。它们将像 A.PropB 一样添加到 A。 CSV 输出中的 PropBs 顺序将由动态对象控制。这意味着第一个道具将是第 1 列,接下来是第 2 列等等。