2011-08-08 46 views
0

我想利用這個查詢:中篩選這個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(); 

不同的是,什麼是對Custom匿名類型檢索,其值必須等於"*"一個附加條件。

爲什麼我不能解決這個問題?我想我對匿名類型或=>運營商瞭解不夠。

+0

'select new {'語句中的最後尾部逗號是否有效?猜測這只是兩個複製粘貼錯誤,因爲我不認爲它會編譯。 –

+0

它編譯好,但他們沒有必要。 –

回答

3

這就是你想要的嗎?

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

令人驚歎。是的,謝謝。 '.Where'函數 - 我現在看到它的正確用法。 –

+0

這工作正常,但它更易於將Where子句放在linq查詢中。這就是linq的全部要點:P –

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謝謝,修復它 –