0

我需要一些关于 Linq 的帮助,我有一个 DB 表,里面有restourants 表。在数据库中,我有“TableNumber、Floor、RestaurantID”我想获取所有楼层的列表。例如,如果我有这个列表:

TableNumber, Floor , RestaurantID
10             1          1  
11             1          1     
12             2          1     
13             2          1     
14             3          1     

我只想得到“1,2,3”。

现在该方法返回所有行。

        public IEnumerable<ListPad.Item> GetFloorsListPads(SSF.ART.Key restaurant_id)
    {
        return from restaurant_floor in EnterpriseTouchRestaurantApplication.TouchRestaurant.AllRestaurantTables
                where restaurant_floor.RestaurantID == restaurant_id && restaurant_floor.Active == true
                orderby restaurant_floor.Floor
                select new ListPad.Item()
                {
                    Color = Color.SkyBlue,
                    Text = string.Format("{0}", restaurant_floor.Floor),
                    Tag = restaurant_floor
                };
    }

感谢您提前提供的所有帮助。

4

1 回答 1

1

您需要一件事或两件事,具体取决于您是否以您描述的方式ListPad.Item定义相等(通过覆盖Equalsand GetHashCode)。如果是这样,那么添加.Distinct()到您的查询中将为您提供不同的项目。如果没有,您可以通过以下三种方式之一进行操作。

  1. 返回一个匿名类型,调用Distinct它,并映射到实际类型(惰性方式)
  2. 实施IEquatableListPad.Item覆盖EqualsGetHashCode(您需要研究如何正确实施GetHashCode,以使其符合您的平等条件)
  3. 定义一个IEqualityComparer<ListPad.Item>定义你的平等。

1 是懒惰的方式,但编码较少。如果您的条件定义了所有使用的相等性ListPad.Item(不仅仅是这个特定场景),那么 2 很方便。3 将相等性检查与实际类型分开,如果您有其他以不同方式定义相等性的情况,这很方便。

于 2013-03-22T15:07:28.717 回答