8

Scott Guthrie による動的 LINQ ライブラリを Entity Framework と C# と共に使用しています。

いくつかの要因に基づいて where 文字列を変数に組み込み、その文字列変数を where 句に渡す必要があります。何らかの理由で、これは機能します:

ContactList = ContactList.Where("DateAdded >= @0", DateTime.Parse("12/1/2012"));

しかし、これはうまくいきません

string WhereClause = string.Format("DateAdded >= {0}", DateTime.Parse("12/1/2012"));
ContactList = ContactList.Where(WhereClause);

前述のように、変数を渡すバージョンで使用する必要があります。2番目が機能しない理由を知っている人はいますか?

前もって感謝します!

4

8 に答える 8

4

私がやろうとしていたことは、現在のDynamicLINQライブラリでは不可能なようです。それが機能しなかった理由は、Tilakによって以下によく概説されています。

私の解決策は、DynamicLINQライブラリを変更して、クエリを文字列として記述し、Date/Timeデータ型のwhere句に渡すことができるようにすることでした。変更はPaulHatcherによってここで見つかりました:LINQ TO SQL、DATE型フィールドを使用した動的クエリ

于 2013-01-03T19:52:15.547 に答える
1

ObjectQuery.Whereオーバーロードは2つのパラメーターを受け入れます。

  1. string predicate
  2. params ObjectParameter[] parameters

最初の例では、パラメーターを使用して(Name、Type、Value ofを使用してWhere)クエリ(where句)を作成します。ObjectParameterObjectParameter

2番目の例では、渡されたものはすべてfinal where句として扱われます(渡されたパラメーターのデータ型に基づく内部変換は行われません)。

于 2013-01-02T17:32:01.607 に答える
0

ContactList.Whereおそらく、数値以外の引数 (DateTime など) を引用符で囲みます。2 番目の文字列では、日付は引用されていません。

于 2013-01-02T17:20:50.393 に答える