0

私は辞書を持っていて、そのタイプはDictionary<int, fooClass> fooDicあり、別の辞書はDictionary<int, string> barlistあり、このlinqを使用して結果を返しています

var foobarList = fooDic.Where(kvp => 
       !barlist.ContainsKey(((fooClass)kvp.Value)._fooID))
       .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

これは fooDic 型の結果を返します。しかし、キャスト出力をbarlist(Dictionary<int, string>)型として入力する必要があります。どのように?

4

2 に答える 2

2

それがかなり単純な変換である場合、キーはあなたの最後の部分です

var foobarList = fooDic.Where(kvp => 
    !barlist.ContainsKey(((fooClass)kvp.Value)._fooID))
    .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

声明。現在使用している場合は、それを。kvp => kvp.Valueの代わりに使用しますkvp => kvp.Value._foobarValue

OPのコメントに従って、「完全な」ソリューション用に編集されました。

于 2012-07-27T07:33:14.053 に答える
1

クラス Foo が次のようになっていると仮定します。

public class Foo
{
    public string SomeValue { get; set; }
    public int SomeOtherStuff { get; set; }
}

新しい辞書を作成します。

var fooDict = new Dictionary<int, Foo>() {
    {0, new Foo() {SomeOtherStuff=10, SomeValue="some value"} },
    {1, new Foo() {SomeOtherStuff=15, SomeValue="some other value"} }
};

それを変換します:

Dictionary<int, string> stringDict = 
    fooDict.ToDictionary(x=> x.Key, x=> x.Value.SomeValue);  //<- note x.Value.SomeValue

stringDict には以下が含まれるようになりました。

{0, "some value"}, {1, "some other value"}
于 2012-07-27T07:35:53.303 に答える