2016-06-24 5 views
1

後だから私はこの(消毒)コードでLINQを使用してデータベースクエリをやってる:最終的な結果は、独特の2000余りを含むリストであるLINQ .Take().Distinct()問題

var dateList = 
      Table1.Where(t1 => t1.column1.Contains(stringUsed)) //stringUsed is a parameter of the method containing this code 
       .Join(Table2, t1 => t1.columnName2, t2 => t2.columnName2, 
        (t1, t2) => new {t1, t2}) 
       .Join(Table3, t1t2 => t1t2.t1.column3, t3 => t3.column3, 
        (t1t2, t3) => new {Date = t3.column4}) 
       .Select(d => d.Date.Value) //Dates are stored as a DateTime? and I need to convert it to DateTime here 
       .Distinct() 
       .ToList(); 

日付(すべて井戸と良い)。ユーザーの要件ごとに、クエリで作成される最新の9​​0レコードの日付を収集するだけで済みます(データはデータベース内で既にソートされているため、ここでそれを行う必要はありません)。

私はと.ToList()の間に.Take(90)を挿入しようとしました。結果は13レコードのみのリストです。他の誰かがこの問題を抱えているかどうかを調べるために、私はここや他の場所を検索しました。何も見つけられませんでした。何か案は?

+0

「Table1」とは何ですか?エンティティフレームワークを使用していますか?もしそうなら、どのデータベースプロバイダですか? – recursive

+0

はい、Entity Frameworkを使用しています。 Table1は私のOracleデータベースのテーブルです。コードを消毒しましたが、何が起きているのかを明らかにしようとしました....私は失敗したと思います。 – user3517375

+0

デバッガに接続し、 '.Distinct()。Take(90).ToString()'の値を取得できますか?これは、生成されたSQLクエリを含む文字列を生成する必要があります。それを質問に追加することができれば、それは役に立ちます。 – recursive

答えて

1

これを支援するための@usrへの小道具。ここでは、必要に応じて、90回の記録を抜くだろうコードは次のとおりです。

var dateList = 
      Table1.Where(t1 => t1.column1.Contains(stringUsed)) //stringUsed is a parameter of the method containing this code 
       .Join(Table2, t1 => t1.columnName2, t2 => t2.columnName2, 
        (t1, t2) => new {t1, t2}) 
       .Join(Table3, t1t2 => t1t2.t1.column3, t3 => t3.column3, 
        (t1t2, t3) => new {Date = t3.column4}) 
       .Select(d => d.Date.Value) //Dates are stored as a DateTime? and I need to convert it to DateTime here 
       .Distinct() 
       .OrderByDescending(d => d) 
       .Take(90) 
       .ToList(); 

どうやら.OrderBy()を追加することが行われるために必要なものです。みんな、ありがとう。

+1

SQLクエリを比較して、何が起きているのかを確認できますか?必要ではありません。そこには13個の要素しか残されていませんが、それはEFの深刻なバグでしょう。 – Andrew

+0

@Andrew私はそうではありませんでした。 – user3517375