6

SQL に変換される Linq クエリで使用できる関数を作成する方法を探しています。Linq-to-SQL を使用していたとき、私は同様の質問をしました。答えは、データベース内の UDF にマップすることでした。モデル定義がクリーンであるため、コード ファースト モデルを使用していますが、残念ながら、私が知る限り、 functions を定義し、関数にマップし、ストアド プロシージャにマップする方法はありません (アイデアはそのコードであると思います)。最初にデータベースを生成する必要があり、それに何かを追加するべきではありません)。時間の経過とともに進化する可能性のある非効率性に対処するための簡単な方法がないため、私にはあまりスケーラブルではないように見えますが、それはここでもそこでもありません...

とにかく、次のようにクエリで使用できる SQL に変換される述語式を定義できることはわかっています。

public static Expression<Func<MyEntity, bool>> FilterMe(int comparisonNumber)
{
    return x => x.SomeProperty == comparisonNumber;
}

var query = MyEntities.Where(FilterMe(1));

これは、返す式でのみ可能boolですか? 次のようなものを探しています:

var query = from m in MyEntities
            let endDate = GetEndDate(m.Start, m.Duration)
            where endDate <= DateTime.Now
            select m;

GetEndDate式関数を組み込む方法はありますか? コード内のコードGetEndDateは、クエリで長い手で書くと問題なく SQL に変換されますが、かなり長くて読みにくいです。

編集-ああ、誰かが「DateAddにSQLFunctionsを使用する」と答える前に、私の例はまさにそれです..例です。これを使用したい方法は他にも無数にあります。前もって感謝します。

4

1 に答える 1

3

LinqKit を試すことができます: http://www.albahari.com/nutshell/linqkit.aspx .AsExpandable() と .Compile() を使用すると、Linq クエリで式を使用できます。

于 2012-07-02T10:41:30.423 に答える