2012-04-12 97 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