0

LINQ 2 エンティティで (SQL サーバー側で) 文字列を結合したいと思います。

LINQ 2 Entity が Aggregate 関数を変換できないという事実を考えると、それは可能ですか?

(ところで、L2S が Aggregate 関数をサポートしているのに LINQ 2 Entity がサポートしていない理由がわかりません)

これを行うために式ツリーを生成しようとしましたが、これが私が思いついたものです:

ParameterExpression list = Expression.Parameter(typeof(List<string>), "list");
ParameterExpression i = Expression.Parameter(typeof(int), "i");
ParameterExpression result = Expression.Parameter(typeof(string), "r");

LabelTarget label = Expression.Label(typeof(string));

BlockExpression block = Expression.Block
(
    new[] { i, result },
    Expression.Assign(result, Expression.Property(list, "Item", Expression.Constant(0))),
    Expression.Assign(i, Expression.Constant(0)),
    Expression.Loop
    (
        Expression.IfThenElse
        (
            Expression.LessThan
            (
                Expression.PreIncrementAssign(i),
                Expression.Property(list, "Count")
            ),
            Expression.Assign
            (
                result,
                Expression.Call
                (
                    null,
                    typeof(string).GetMethod
                    (
                        "Concat",
                        new Type[]
                        {
                            typeof(string),
                            typeof(string),
                            typeof(string)
                        }
                    ),
                    new Expression[]
                    {
                        result,
                        Expression.Constant(","),
                        Expression.Property(list, "Item", i)
                    }
                )
            ),
            Expression.Break(label, result)
        ),
        label
    )
);

var join = Expression.Lambda<Func<List<string>, string>>(block, list);

Response.Write(join.Compile()(new List<string> { "a", "b", "c" }));

これはうまく機能していList<string>ます。「a、b、c」という結果が得られます。

しかし、このコードを に適用する方法がわかりませんIQueryable<string>

にはIQueryable<string>"Item" プロパティがなく、IQueryable のインデックスによって要素を取得する方法がありますが、これはどのように SQL に変換されるのでしょうか?

それで、LINQ 2エンティティで(SQLサーバー側で)結合文字列タスクを達成する方法はありますか?

4

0 に答える 0