0

Linq について少し助けが必要です。レストランテーブルを含む DB テーブルがあります。DBには「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平等を定義するかどうかに応じて、1つまたは2つのものが必要です。その場合、クエリに追加すると、個別のアイテムが表示されます。そうでない場合は、3つの方法のいずれかで実行できます。EqualsGetHashCode.Distinct()

  1. 匿名型を返し、Distinctそれを呼び出し、実際の型にマップします(怠惰な方法)
  2. 実装IEquatableListPad.ItemオーバーライドEquals、および(平等条件に一致するようGetHashCodeに適切に実装する方法を調査する必要があります)GetHashCode
  3. IEqualityComparer<ListPad.Item>あなたの平等を定義するを定義します。

1は怠惰な方法ですが、コーディングは少なくなります。ListPad.Item2は、条件が(この特定のシナリオだけでなく)のすべての使用に対して同等性を定義している場合に便利です。3は、同等性チェックを実際のタイプから分離します。これは、同等性が異なる方法で定義される他の場合に便利です。

于 2013-03-22T15:07:28.717 に答える