1

次のように、リソースファイルからすべてのデータ要素を保存しています。

XDocument xDocTranslated = XDocument.Load(TranslatedFile);
var resultTranslated = from item in xDocTranslated.Descendants("data")
select new
{
    Name = (string)item.Attribute("name"),
    Value = (string)item.Element("value")
};

上記の結果と比較したい文字列のリストがあり、一致する場合は新しい値を保存します。

私はこのようなことを試みています:

//Get each string that i want to translate
foreach (var name in StringsToTranslatelist)
{
    //Look up the translated value from data extracted from xml file
    var value= from entry in resultTranslated
        where entry.Name == name;                  <--this does not work

}

ここで使用する必要がある LINQ ステートメントは何ですか?? resultTranslated を検索するにはどうすればよいですか??

4

3 に答える 3

5

指定された名前に一致する値だけを取得したいようです。その場合、次のようなスカラー値を返す標準のクエリ演算子を使用する必要がありますSingle

var value = resultTranslated.Single(r => r.Name == name).Value;

Single一致がない場合、または複数の一致がある場合は、例外がスローされます。

Firstまたは、最初の結果を取得したい場合 (何もない場合は例外をスローしたい場合) を使用するSingleOrDefaultFirstOrDefault、要件に応じて自分で null チェックを行うことができます。

于 2013-06-14T16:52:08.070 に答える
1

名前で値を取得したいと思います:

foreach (var name in StringsToTranslatelist)
{
    var data =  resultTranslated.FirstOrDefault(e => e.Name == name);
    if (data != null)
    {
        // match is found, you can use value
        var value = data.Value;
    }
}

しかし、これを行うより効率的な方法は、単にresultTranslated辞書に変換することです:

var data = resultTranslated.ToDictionary(x => x.Name, x => x.Value);

次に、名前で値を取得できるようになります

if (data.ContainsKey(name))
    value = data[name];
于 2013-06-14T17:03:29.533 に答える
1

//xml ファイルから抽出されたデータから翻訳された値を検索します

私には、辞書検索が最も自然に適合するようにすぐに見えます。

したがって、コードは次のようになります。

//creating the dictionary from the xml doc
var resultTranslatedLookup = xDocTranslated.Descendants("data")
                     .ToDictionary(keyItem => keyItem.Attribute("name").Value
                     , valItem => valItem.Element("value").Value);

//now usage
foreach (var name in StringsToTranslatelist)
{
    string result;
    if (resultTranslatedLookup.TryGetValue(name, out result))
    {
        //do your thing
    }
}

ToDictionary 呼び出しが明確であることを願っています。これは単なるキーと値のセレクターであり、select new と同等です。

于 2013-06-14T17:40:10.510 に答える