2011-11-11 28 views
3

私はEF接続を介してアクセスするSql Server CE 3.5データベースで動作するWindowsフォームアプリケーション(.NET 4.0)を使用しています。 Linqの奇妙な動作

var list = db.UserPresentation 
         .Select(up => new 
         { 
          UserPresentationID = up.UserPresentationID, 
          PresentationName = up.PresentationName, 
          DateRequested = up.DateRequested, 
          Edit = string.Empty, 
          Delete = string.Empty, 
          Download = string.Empty 
         }) 
         .OrderByDescending(up => up.DateRequested) 
         .ToList(); 

は今、私は外部変数と句を紹介し、それがゼロの結果を返します。

は、ここでは、2つの結果を返し、私の最初のクエリです。 LinqPadでこの同じコードを実行すると、2つの結果が返されます。

int userID = 2; 

      // load list of user presentations 
      var list = db.UserPresentation 
         .Where(up => up.UserID == userID) 
         .Select(up => new 
         { 
          UserPresentationID = up.UserPresentationID, 
          PresentationName = up.PresentationName, 
          DateRequested = up.DateRequested, 
          Edit = string.Empty, 
          Delete = string.Empty, 
          Download = string.Empty 
         }) 
         .OrderByDescending(up => up.DateRequested) 
         .ToList(); 

今私は、クエリ内のユーザーIDをハードコーディングし、それが再び二つの結果を返します。

var list = db.UserPresentation 
         .Where(up => up.UserID == 2) 
         .Select(up => new 
         { 
          UserPresentationID = up.UserPresentationID, 
          PresentationName = up.PresentationName, 
          DateRequested = up.DateRequested, 
          Edit = string.Empty, 
          Delete = string.Empty, 
          Download = string.Empty 
         }) 
         .OrderByDescending(up => up.DateRequested) 
         .ToList(); 

私は本当に困惑します。ここで何が起こっているか考えてみましょうか?

+0

たらNULL可能日時と同様のものを持っていました。あなたは2つの結果を返すのですか? – Ray

+0

クエリは2つの結果、yesを返します。しかし、より広い問題は、where句でハードコードされた値の代わりに変数を使用すると、なぜクエリが機能しないのですか? – draconis

+3

それはうまくいかない理由はありません。おそらくあなたは別の 'userId'変数を持っています。 – leppie

答えて

-1

変数内に同じハードコーディングされた値を割り当ててみましたか?私の推測では、あなたの変数の値があなたのデータの中に見つからないということです。つまり、変数名が正しいと確信しているならば。

0

UserIDはnullですか?

ので.Where(up => up.UserID.HasValue && up.UserID.Value == userID)

を行うようにしてください場合は、私はあなたが実際に(私が見ることができる)問題が何であるかを私たちに語っていない