1

ねえ、私はExpression<Func<T, bool>>文字列プロパティがDateTimeOffsetに変換/キャストされ、DateTimeOffset操作を実行できるようにしようとしています。

データプロバイダーとしてLinq2SQLを使用しています。これは、文字列をDateTimeOffsetに相当するSQLに変換することをサポートしています。理想的には、式をIEnumerableとしてメモリ内ではなく、IQueryableデータソース内で直接評価する必要があります。

私がこれまでに試みたことの例については、以下を参照してください。

public class MyClass
{
    public string MyValue;
}

Expression<Func<MyClass, bool>> filter = mc => DateTimeOffset.Parse(mc.MyValue) > new DateTimeOffset(2007,1,1);

残念ながら、このフィルターの定義により、メモリー内評価が発生します。

4

1 に答える 1

1

基になる物理テーブルの列が ではnvarcharないdatetimeため、運が悪いと思います。LINQ2SQL プロバイダーは、それがnvarcharデータであることを認識しているため、それを値として扱うネイティブ SQL 式を生成しませんdatetime

正直なところ、生の手作りのSqlCommandオブジェクトでこれを行う安全な方法さえ見当たりません. データを としてメモリに読み込みString、次に に変換してからDateTimeOffset、メモリ内で手動でフィルタリングする必要があります。この列でネイティブ SQL フィルタリングが必要な場合は、テーブル スキーマを変更する必要があります。

于 2009-10-21T16:38:29.923 に答える