2011-01-09 7 views
1

私は3つのテーブルTbl_Listings、Tbl_AttributesLU、およびTbl_ListingAttributesを持っています。foreachループ内でIEnumerableが期待通りに更新されない(C#、MVC2&Linqを使用)

Tbl_Listingsはすべて私のリストを保持しています。 Tbl_AttributesLUには多数の属性(IDを持つ名前)が保持されます。 Tbl_ListingAttributesには、各リスティングの属性がいくつか保持されています。

私は自分のサイトのユーザーが各リスティングに付随する属性で検索範囲を絞り込みながらリスティングを検索できるようにしたいと考えています。

これを行うには、まず、ユーザーが選択したすべての属性を、ViewModelにリストとして送信します(AttributesFromView)。

次に、すべてのリスティングを取得し、ListingsInDBというIEnumarableコレクションに入れます。

次に、AttributesFromViewの各属性に基づいてリストを絞り込むためにforeachループを作成します。以下はコードです。今

IEnumerable<Listing> ListingsInDB = from x in DBEntities.Tbl_ListingSet select x; 

foreach (int Attribute in AttributesFromView) 
{ 
    ListingsInDB = (from x in ListingsInDB 
        from a in x.Tbl_ListingAttributes 
        where a.Tbl_AttributesLU.ID == Attribute 
        select x); 
} 

私ListingsInDBコレクションは、foreachループの外に座っているので、私は、foreachループの各反復で、それが唯一の添付特定の属性でリストを選択することで、コレクションを狭めるべきであると仮定しています。したがって、最初の反復では、AttributesFromView [0]を持つすべてのリスティングが選択されます。そして、次回の反復で、この新しく更新されたListingsInDBコレクションから、At​​tributesFromView [1]などを含むそれ以上のリストをすべて選択します。

これは機能しません。代わりに、AttributesFromViewリストの最後の属性を持つ項目を常に選択します。私はこれがなぜ起こっているのか少し混乱しており、問題を解決する上であなたの助けに本当に感謝しています。

また、タイトルの謝罪は非常に曖昧です - 私は実際にどのようにこの質問にフレーズするか分からなかった。事前に

おかげで、

Sheefy

答えて

1

あなたはconsidered harmfulあるループ変数、上閉じています。ソリューションやリンクの

foreach (int attribute in AttributesFromView) 
{ 
    int attribute2 = attribute; 
    ListingsInDB = (from x in ListingsInDB 
        from a in x.Tbl_ListingAttributes 
        where a.Tbl_AttributesLU.ID == attribute2 
        select x); 
} 
+0

おかげで - 今、期待通りに動作します。それを修正するために

一つの方法は、ループ変数の値のコピーを作成することです。とても有難い。 – sheefy

関連する問題