2017-09-27 3 views
0

うまくいけばタイトルが十分に分かりました。 マイリポジトリメソッドは次のようになります。その方法の結果のうちLINQ Where句は常に空のリストを返します

public async Task<List<Model>> GetAllByCode(string code) 
{ 
    using (var ctx = new DatabaseContext()) 
    { 
     return await ctx.Models.Where(m => m.Code.Equals(code)).ToListAsync(); 
    } 
} 

、私はビューでコンボボックスにバインド監視可能なコレクションを作成します。

Models = new ObservableCollection<Model>(await ModelRepository.GetAllByCode("code")); 

しかしのObservableCollectionは常に空です。私はデバッガで結果を見ることもできます(私が間違っていない場合はIEnumerableまたはIQueryableのコレクションです)。私が使用するとデータベースが大丈夫だと100%確信しています。

return await ctx.Models.ToListAsync(); 

データベースからすべての行を返します。

誰でも私が間違っていることを教えてもらえますか?

編集:
問題はエンティティフレームワークにあります。私はまだ解決策を見つけられませんでしたが、私のコンテキストはテーブルから新しいデータを取得しません。代わりに、毎回のリクエストで使い捨てのコンテキストを使用していても常にキャッシュされたバージョンが必要です。

まだ回答はありません。

+0

'Code'フィールドに' code'という値がありますか? –

+1

'm.Code ==" code "'を持つモデルはありますか?あるいは、おそらく 'ModelRepository.GetAllByCode(" code ")'の代わりに 'ModelRepository.GetAllByCode(code)'を書くつもりでしたか? – Clemens

+0

はい、持っています。私はスペルミスでもそれを二重にチェックしました。 – Desomph

答えて

0

等号コードが文字列でない場合、あなたはString.Compare()または(m.Code as string).Equals()またはこれを使用することができますエンティティへのLINQに失敗することがあります。

public async Task<List<Model>> GetAllByCode(string code) 
{ 
    using (var ctx = new DatabaseContext()) 
    { 
     return await ctx.Models.Where(m => m.Code.ToLower() == code.ToLower()).ToListAsync(); 
    } 
} 

それとも、これに表にデバッガでステップバイステップであなたのエントリをチェックします:

public async Task<List<Model>> GetAllByCode(string code) 
{ 
    using (var ctx = new DatabaseContext()) 
    { 
     var all = await ctx.Models.ToListAsync(); 
     var result = all.Where(m => m.Code.Equals(code, StringComparison.InvariantCultureIgnoreCase))); 
     return result; 
    } 
} 

ObservableCollectionはスレッドセーフではありません。

+0

私はこれを試しました、それは同じ結果です。 'result'変数はIEnumerableを保持しますが、' .ToList() 'を呼び出してRepoから返すと、observableコレクションはまだ空です。 – Desomph

+0

observalbeCollectionはスレッドセーフではありません。それが問題です。 https:// stackoverflow。com/questions/23108045/how-to-make-observablecollection-thread-safe しかし、両方のスナップは、asyncとうまく動作し&待っています! – cSteusloff

+0

それはちょうど答えかもしれない、再チェックするつもりかもしれないが、私はそれを得たと思う。あなたは "スレッド非安全"であなたの答えを編集できますか? – Desomph