2011-08-08 10 views
0

フィルタリング:Custom匿名型のために取得されているもののための追加的な条件としてことを除いて私はこのクエリを使用する場合、このLINQクエリ

var queryData = from va in xdoc.Descendants("language") 
       select new 
       { 
        StringID = va.Parent.Parent.Attribute("id").Value, 
        Language = va.Attribute("name").Value, 
        LanguageData = va.Element("value").Value, 
       }; 

var organizedData = from x in queryData 
        group x by x.StringID into xg 
        select new 
        { 
         StringID = xg.Key, 
         English = xg.SingleOrDefault(x => x.Language == "ENGLISH_US").LanguageData, 
         Custom = xg.SingleOrDefault(x => x.Language == languageBox.SelectedItem.ToString()).LanguageData, 
        }; 

mainView.DataSource = organizedData.ToList(); 
mainView.Refresh(); 

を、その値は"*"に等しくなければなりません。

なぜこれを理解できないのですか?私は匿名型や=>オペレータについては十分に分かりません。

+0

'select new {'ステートメントの最後のコンマは有効ですか?私はそれがコンパイルするとは思わないので、それはちょうど2つのコピーの貼り付けエラーだと思う。 –

+0

コンパイルは正常ですが、必要はありません。 –

答えて

3

それはあなたが欲しいものですか?

mainView.DataSource = organizedData.Where(x => x.Custom == "*").ToList(); 
+0

素晴らしい。はい、ありがとうございます。 '.Where'関数 - 私は正しい使い方を見ています。 –

+0

これはうまくいきますが、linqクエリにWhere節を置くと読みやすくなります。そしてそれはlinqの全ポイントです:P –

2

これはあなたが探しているものだと思います。私は一時変数に値を入れて、2回計算する必要はありません。

 var organizedData = from x in queryData 
          group x by x.StringID into xg 
          let temp = xg.SingleOrDefault(x => x.Language == languageBox.SelectedItem.ToString()).LanguageData 
          where temp == "*" 
          select new 
          { 
           StringID = xg.Key, 
           English = xg.SingleOrDefault(x => x.Language == "ENGLISH_US").LanguageData, 
           Custom = temp, 
          }; 
+1

宣言される前に 'xg'を使用しています... –

+0

@Thomasありがとう、それを修正しました –

関連する問題