2010-11-25 11 views
2

私は、私のwinformsアプリケーションでいくつかのBindingSourcesのデータソースとしてObjectQueryを使用します。私modelContextエンティティのObjectQuery またはIQueryable <T>

View.DsMyDataSource = (from p in ModelContext.GetContext.MyObject 
         where p.Deleted == false p) as ObjectQuery<MyObject>; 

ModelContext.GetContext()戻りシングルトンを: 問題は、私は、データソースを定義し、それらを使用してイムは、クエリのようにLINQのために使用されるということです。

これを行うのは良い方法ですか? LINQのようなクエリを使用すると、キャストのために何かが緩んでしまうかもしれません。

linq構文を使用してObjectQuery型を取得できる他の方法はありますか?

ありがとうございます。

+1

人が私の質問に正しく答えることができなければ、なぜその答えが嘘であるべきですか? – gruber

+0

あなたは答えとしてマークすることができます。答えは正確な答えを見つけるのに役立ち、人々は自由に時間を過ごします。これはあなたに簡単な贈り物です。 –

+0

ちょっと、その遅れたアンサーマークをありがとう。それは良い答えだった、あなたがなぜそんなに待っていたのかわからない。それについてちょっとうんざりしていますか?本当に小さな努力です。 –

答えて

4

実際にはObjectQuery<T>は、IQueryable<T>を実装しているため、実際の違いはありません。

IQueryableにバインドしないことをお勧めします。これはUIに多大な力を与えているためです。 IQueryableのポイントは、クエリーの実行を後の時点(BLL、サービス層など)に延期することですが、プレゼンテーションIMOは遅すぎます。

私はそれが遅すぎると言います。私は、クエリがUIに到達するまでには、データベースに対するクエリをもう作成する必要がないことを意味します。しかし、UIが.Count().Sum()などの操作を開始すると、2つのクエリが実行されます。データコンテキストを破棄することを非常に困難にします。

私の助言は、具体的なコレクションを返す:例えばICollection<T>、それにバインドする。

ページングのようなことが必要な場合は、LINQ .Skip().Take()で行う必要があります。

関連する問題