LINQ查询中的动态属性

时间:2014-07-29 14:45:20

标签: c# linq

我尝试将复杂域模型转换为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; }
}

1 个答案:

答案 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...
}