1
public class Co
{
    public int Id { get; set; }
    public string Title { get; set; }
    public List<string> Cards { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        List<Co> coll = new List<Co>();
        Co c1 = new Co();
        c1.Id = 1;
        c1.Title = "A";
        coll.Add(c1);
        Co c2 = new Co();
        c2.Id = 2;
        c2.Title = "B";
        coll.Add(c2);
        List<KeyValuePair<int, int>> list = new List<KeyValuePair<int, int>>();
        list.Add(new KeyValuePair<int, int>(1, 2));
        list.Add(new KeyValuePair<int, int>(1, 3));
        list.Add(new KeyValuePair<int, int>(1, 1));
        list.Add(new KeyValuePair<int, int>(2, 1));

        Console.ReadKey();
    }

オブジェクトのIDとキーcollの値を比較して、値のコンマ区切り値を持つすべてのオブジェクトにCardsプロパティを割り当てたいlistcolllist

出力: 最初のオブジェクト c.Cards ="2,3,1" 2 番目のオブジェクト c.cards= "1"

foreach ループでそれを行うことができます。誰でもlinqで解決策を教えてもらえますか?

4

1 に答える 1

2

cまず、同じオブジェクトを 2 回使用しているため、サンプル データが正しくないことに注意してください。次のようになります。

List<Co> coll = new List<Co>();
Co c = new Co();
c.Id = 1;
c.Title = "A";
coll.Add(c);
c = new Co(); // HERE
c.Id = 2;
c.Title = "B";
coll.Add(c);
List<KeyValuePair<int, int>> list = new List<KeyValuePair<int, int>>();
list.Add(new KeyValuePair<int, int>(1, 2));
list.Add(new KeyValuePair<int, int>(1, 3));
list.Add(new KeyValuePair<int, int>(1, 1));
list.Add(new KeyValuePair<int, int>(2, 1));

さて、あなたのCardsプロパティはList<string>ではなく であることに注意してください。stringそのため、「カンマ区切りの値」が何を意味するのかわかりません。文字列の場合Cards:

coll.ForEach(co => co.Cards = String.Join(",",
    list.Where(l => l.Key == co.Id)
        .Select(l => l.Value)));

現在の定義は次のList<string>とおりです。

coll.ForEach(co => co.Cards =
    list.Where(l => l.Key == co.Id)
        .Select(l => l.Value.ToString()).ToList()
);
于 2013-04-13T22:16:39.950 に答える