0

文字列 "a:b,c" が与えられた場合、C# で正規表現とラムダ式を使用して文字列をクラスのリストに分割し、次のように返します。

{
    Column1: "a",
    Column2: "b",
},
{
    Column1: "a",
    Column2: "c",
}

言い換えれば、コロンの後ろのカンマ区切りの値ごとに、コロンの前の値を繰り返したいのです。SQL では、これは、Column1 が結合の左側で、Column2 が右側であるクロス結合を行うのと同じです。

私は正規表現を含むほとんどのコードを持っていますが、カンマ区切りの値を新しいクラスに射影selectするための 2 番目のコードを取得できません。split代わりに、私のコードは効果的に以下を返します。

{
    Column1: "a",
    Column2: [
        "b",
        "c"
    ]
}

これが私のコードです。

public class MyClass {
    public string Column1 { get; set; }
    public string Column2 { get; set; }
}

List<MyClass> mc = "a:b,c"
    .Select(a => new { Column1 = new Regex(@"[a-z]+(?=\:)").Match(a).Value), Column2s = new Regex(@"(?<=\:)[a-z]+(,[a-z]+)*").Match(a).Value })
    .Select(b => new MyClass { Column1 = b.Column1, Column2 = b.Column2s.Split(',') })
    .ToList();

ご協力ありがとうございました。

4

2 に答える 2

1
string input = "a:b,c";

int colon = input.IndexOf(':');
string left = input.Substring(0, colon);
string right = input.Substring(colon + 1);

List<MyClass> result = right.Split(',')
                            .Select(x => new MyClass
                            {
                                Column1 = left,
                                Column2 = x,
                            })
                            .ToList();
于 2013-04-18T08:27:14.883 に答える