-2

我需要做 select 和 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);
}

Tks

4

2 回答 2

0

2件事:

  • 我认为使用 Select() 有点不必要,因为所做的只是限制发送到 foreach 的数据,至少在这种情况下,您正在做的事情只会节省非常小的内存。如果您将整个变量转储到 JSON 中,那么限制数据量将是有益的。
  • 就像另一个人说的那样,如果你愿意,在 foreach 中使用 var 可以让你使用匿名类型。我个人的偏好是,我尽量避免这种情况,除非是在序列化事物时(即使这样,我也更喜欢做数据合同以避免以后如果我拼错单词或其他东西时出错)

    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 必须说一些比较才能进行订购。我只是举例说明。

于 2012-04-12T19:03:04.333 回答
0

您正在创建一个匿名类型:Select(i => new { i.color, i.description}).

您不能Ds.HousesRow在 foreach 中将该类型转换为。

将循环更改为

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

您将在循环中使用匿名类型。

于 2012-04-12T18:55:22.873 回答