2012-04-12 65 views
-2

我需要做select和foreach,但它不起作用。我怎樣才能做到這一點?使用LINQ和Lambda在DataSet中選擇和Foreach不起作用

Ds ds = new Ds(); //DataSet 
Ds.HousesRow houseRow= ds.House.NewHousesRow(); 

houseRow.color= "red"; 
houseRow.date= new DateTime(); 
houseRow.description= "ZZZ"; 

ds.Houses.AddHouseRow(houseRow); 

var lHouses= ds.Houses.Select(i => new { i.color, i.description}).OrderBy(i => i).Distinct(); 

foreach (Ds.HousesRow item in lHouses) 
{ 
     System.Diagnostics.Debug.Print("Color: " + item.color + "Description: " + item.description); 
} 

韓國社交協會

+1

它不起作用? – 2012-04-12 18:52:46

回答

0

你正在創建一個匿名類型:Select(i => new { i.color, i.description})

您不能在foreach中將該類型轉換爲Ds.HousesRow

你的循環改爲

foreach (var item in lHouses) 
{ 
     System.Diagnostics.Debug.Print("Color: " + item.color + "Description: " + item.description); 
} 

而且你將使用在循環中的匿名類型。

0

兩兩件事:

  • 我認爲使用選擇()是有點不必要的,因爲所有這一切都做的是限制發送到的foreach的數據,至少在這種情況下,只會給一個很小節省內存與你在做什麼。如果您將整個變量拋出,比如說JSON,那麼限制數據量將會是有益的。
  • 就像其他人說的,在foreach中使用var會讓你使用匿名類型,如果你想。我個人的偏好,我儘量避免,除了序列化的東西時(即使在那時我喜歡做datacontracts避免錯誤後,如果我拼錯一個字或東西)

    Ds.HouseRow lHouses= ds.Houses.OrderBy(i => i.Description).Distinct(); 
    
    foreach (Ds.HouseRow item in lHouses) 
    { 
         System.Diagnostics.Debug.Print("Color: " + item.color + "Description: " + item.description); 
    } 
    

編輯:另外,你的orderby必須說一些比較來做訂購。我只是舉例說明。

+0

那麼'OrderBy(i => i)'會做什麼? – BrokenGlass 2012-04-12 19:13:29

+0

哎呀,我錯過了。它應該是OrderBy(i => i.Description)或類似的東西。我沒有我的Windows機器來測試,以確保它能正常工作,但它看起來應該按照說明進行分類。 – 2012-04-12 19:40:53

+0

現在你的Distinct()應該做什麼?我想象OP想要選擇不同的顏色和描述對。你的例子消除了列表中的重複,這是非常不同的。 – 2012-04-12 21:33:57