2010-12-08 24 views
2

私は次のことをやっていると信じて:Entity Framework 4:.Take(10)が20レコードを返す原因は何ですか?

var myQuery = Products.Where(p => p.deptid = 3); 
var myCount = Products.Count(); 
var myResult = myQuery.OrderBy(p => p.deptname).Skip(10).Take(10); 
//then return an object with a count property and a List<Product> property. 

時には、これはダブルテイク量を返します。

私のソリューションには、リポジトリとサービスレイヤという2つのレイヤがあります。注文したり、スキップしたり、リポジトリに入れたりしていないと確信しています。これがサービス層コードです。 10レコードを取ったときにmyResultに10以上のレコードが存在する原因は何ですか?

+0

カウントプロパティとリストプロパティを持つオブジェクトを返す方法を示すかもしれません。 –

+0

「時々」とはどういう意味ですか?この場合、商品リストには何個の商品が入っていますか?それ以外の場合はいくつですか?この問題の原因となるいくつかのコードがあるはずです。これを見るために '.ToList()'をTake(10) –

+0

の末尾に追加すると、何か問題が発生しています。まず、 '.Take(10)'はありますが、 '.ToList()'は最後にありません。だから 'myResult'は' IQueryable 'です。具体的なコレクションにクエリを具体化するコードを表示します。 – RPM1984

答えて

1

私はOrderBy()を実行した後、別のOrderBy()を行ったことがかなり確信しています。 Skip()。Take()はおそらく内部IDを使ってレコードを選択しました。

OrderBy()、Skip()、Take()のいずれかが発生し、すべてが修正されたことを確認するために、すべてのアプリケーションレイヤーを調べました。

しかし、人生を救うために問題を再現することはできません。これが解決策であるかどうかは分かりません。

+0

EFでそれらのミステリーグレムリンの1つまでそれをチョーク。 – NotMe

関連する問題