爆炸收集并保存一些字段。

时间:2012-05-12 14:34:52

标签: c# linq collections

我有以下课程:

class Item
{
    public string[] field1;
    public int field2;
}

我有收集的物品。我怎样才能将这些集合转换为

class Item
{
    public string field1;
    public int field2;
}

我的意思是Items.SelectMany(x => x.field1),但我需要为我的集合中的每个元素保存filed2值。

例如

field1:{"asd","asdf","fscsd"}
field2:123

->

field1:{"asd"}
field2:123

field1:{"asdf"}
field2:123

field1:{"fscsd"}
field2:123

2 个答案:

答案 0 :(得分:3)

试试这个:

var res = Items.SelectMany(x => x.field1.Select(s => new {field1=s, x.field2}));

您将获得一系列匿名对象,每个对象都包含两个字段 - field1field2

答案 1 :(得分:1)

我认为这符合其目的:

首先,将您的课程更改为:(两个名称不同)

class Items
{
    public string[] field1;
    public int field2;
}

class Item
{
    public string field1;
    public int field2;
}

然后,这个函数将你的第一个类分成两个(或更多)其他类

public Item[] splitItems(Items item)
{
    Item[] items = new Item[item.field1.length];
    for(int i=0;i<item.field1.length;i++)
    {
        items[i].field1 = item.field1[i];
        items[i].field2 = item.field2;
    }
    return items;
}

Items mainItem = new Items();
mainItem.field1 = {"asd","asdf","fscsd"};
mainItem.field2 = 123;

Item[] tempItems = splitItems(mainItem);

现在你应该看到:

tempItems [0] .field1 =“asd”;
tempItems [1] .field1 =“asdf”;
tempItems [2] .field1 =“fscsd”;

并且他们所有的field2将等于123