LINQ:如何将IEnumerable <sometype>加入到具有SomeType属性的对象中?</sometype>

时间:2013-04-24 14:14:39

标签: linq join

我有一个IEnumerable<byte>我要转换为new object { byte property1, byte property2, ....},将所有这些字节值连接到一个对象中。

我如何使用LINQ做到这一点?

1 个答案:

答案 0 :(得分:0)

我不知道您为什么要实现,但我认为有一种方法,使用System.Dynamics中的ExpandoObject

可以使用LINQ中的Aggregate方法完成:

return source.Select((x, i) => new {name = string.Format("{0}{1}", propertyPrefix, i), value = x})
                .Aggregate((new ExpandoObject()) as IDictionary<string, Object>,
                        (e, i) =>
                            {
                                e[i.name] = i.value;
                                return e;
                            }, e => e as ExpandoObject);

您应该将其隐藏在其他扩展方法下,例如ToExpandoObject

public static ExpandoObject ToExpandoObject<TSource>(this IEnumerable<TSource> source, string propertyPrefix)
{
    return source.Select((x, i) => new {name = string.Format("{0}{1}", propertyPrefix, i), value = x})
                    .Aggregate((new ExpandoObject()) as IDictionary<string, Object>,
                            (e, i) =>
                                {
                                    e[i.name] = i.value;
                                    return e;
                                }, e => e as ExpandoObject);
}

用法:

var source = new List<int>() {123, 234, 345, 456, 567, 678};

var t = source.ToExpandoObject("Property");