2012-03-07 13 views
0

私はLinqの初心者です。私の内部結合クエリは、例えばコード内のテーブルを横切るよりも遅く、効率が悪いことがわかりました。さらに、ListViewで課金されるこれらのデータはずっと軽量です。Linqで効率的にテーブルを結合する

public static IEnumerable<Alumno> GetItems() 
{ 
     return (from gal in me.Table<GrupoAlumno>() 
       join alu in me.Table<Alumno>() 
       on gal.IdAlumno equals alu.ID 
       select alu); 
} 

ことが可能である方法:ここで

コードはありますか?

ありがとうございます。

+0

'' me.Table () 'と' me.Table ()の種類は何ですか?それは正確に何を返すのですか?より速いコードを表示することもできますか? – svick

+0

-1わかりにくい質問。私の最初の質問(さらに多くのことがあります):LinqToSqlまたはLinqToObjectsを使用していますか? –

+0

私の英語はすみません。私は2つの違いを知らない。いずれの場合でも、問題は解決されます。ありがとうございます – daniherculano

答えて

1

問題が解決しました。 toList()を変換する必要がありましたが、今度はListViewへのデータ読み込みが正常に動作します。

public static IEnumerable<Alumno> GetItems() 
{ 

     return (from gal in me.Table<GrupoAlumno>() 
       join alu in me.Table<Alumno>() 
       on gal.IdAlumno equals alu.ID 
       select alu).ToList(); 
} 
0

Linq演算子はIEnumerable<T>で動作するため、データの並べ替えについての前提条件を設定することはできません。

データ量が増えると、基礎となるデータの格納方法やその他の既知の事実を利用する他の構造を使用して、より効率的なコードを書くことができます。

パフォーマンスに問題がある場合(実際に問題があることを確認するためにコードをプロファイルしましたか?)、linqはおそらく行く方法ではありません。 Linqは、パフォーマンスが実装にかかる時間よりも重要でないときに、データの検索と操作を表現するのはすばらしいと思います。それが逆の場合、linqは遅すぎるかもしれません。

1

私は既存の承認された回答に同意しません。

LinqはIEnumerable<T>で動作するだけでなく、IQueryable<T>で動作することもできます。Linq文はSQLなどのクエリ言語で実行されることがよくあります。この場合、LinqはパフォーマンスがSQLと直接似ていますが、Compile time type checkingやintellisenseなどの利点があります。

パフォーマンス上の問題に直面しているときはいつでも、何が起きているのかを測定することは良い最初のステップですが、「linqはおそらく行く方法ではない」と私は確信しています。逆に - "linqはおそらく行く方法ですが、何が起こっているのかを測定して理解してください - SQLの場合と同じように、linqクエリがあなたが本当に期待していないことをするのは簡単です!

+0

私はOPがlinq-to-objectについて質問していると思っていたので、それは私の答えの文脈です。 'IQueryable 'を使ったLinq-to-somethingは、パフォーマンスに関して全く別の話です。 –

+1

私はちょっと慎重だったのですが、それは 'テーブル'が含まれていたので、私はOPがSQLiteを使用しているに違いないと思っていました...しかし、 – Stuart

関連する問題